2017-06-21 120 views
0

早上好SQL專業人員,帶有計算字段的動態SQL

這是關於使用MS SQL 2012動態創建複雜的SQL查詢。爲了更好的理解,抽象/簡化了任務描述。 下面的例子將解決這個問題,但不工作:

Select 
    Left (Kunden ,10) AS Result01, 
    Right (Result01,5) AS Result02 
from tbl_Kunden 

請注意:我想使用「右」功能的「左」函數的結果(左和右是唯一的其他幾個佔位符功能)。但是,這是由於一個錯誤:無效的列名稱'Result01'。 有沒有人有一個想法如何創建一個dyn。 SQL查詢,以便我可以使用之前插入的後續函數中的命名字段?

由於提前,henuit

+0

請參閱下面XXXXX – henuit

回答

0

隨着子查詢:

SELECT 
    t.Result01, 
    Right(t.Result01, 5) AS Result02 
FROM 
(
    SELECT 
     Left(Kunden, 10) AS Result01, 
    FROM tbl_Kunden 
) as t 
+0

親愛的背影, 感謝您的超快速響應。這對於簡化的例子來說效果最好。實際上,我有8-12個函數(包括UDF),部分也在查詢的WHERE部分發生,還有AND/OR。 所以我擔心你的解決方案不會使它更容易/更簡單。如果你有一個想法會很好。祝你好運 – henuit

+0

@henuitm好吧,也許如果你整個查詢,我可以幫你降低複雜性 – Backs

+0

不幸的是,我沒有一個查詢。其任務是從元模型讀取查詢的信息並從中構建SQL查詢。在元模型中,用戶可以使用圖形界面構建查詢 - 無需SQL知識。 不過謝謝 – henuit

0

假設第一個函數的輸出是你可以做這樣的事情第二函數的輸入兼容。

Select 
    Left (Kunden ,10) AS Result01, 
    Right (Left (Kunden ,10),5) AS Result02 
from tbl_Kunden 

本質SQL將評估從最內部嵌套聲明的聲明,最外面的嵌套這樣的語句應該把你帶到任何你需要。現在,如果最內層或內層聲明的輸出與封裝函數不兼容,則可能需要合併嵌套的頂層1選擇或演員表,但不知道流程的完整故事,則無法說出您可能的內容需要做。

/****************************編輯**************** ************************************************** ***********/ 根據你最近的評論,我會建議使用有聲明。這些將在where子句和查詢完成後進行評估。用於評估聚合函數。我會對使用這種技術進行思考,因爲它在處理極大的數據集時要付稅,因爲它在查詢完成後執行。

select foo, count(bar) 
from table 
where value = value 
group by foo 
having count(bar) >= number 

這將允許您評估選定的值,而不必將其放入子查詢中。這可能會也可能不會解決您的所有問題,但在必要時達到其目的。

+0

親愛的SFrejofsky, 當你寫,我目前正在工作。然而,這很難控制,我希望計算的字段更容易。 例如,在where條件中:... result01> = result02 .. – henuit