2011-11-15 200 views
6

我有這樣的查詢:使用SQL Server計算列

select 
(price1 + price2 + price3) as total_price 
from prices 

我如何使用計算列TOTAL_PRICE計算其他總這樣嗎?

select 
(price1 + price2 + price3) as total_price, 
(price4 + total_price) as total_price2 
from prices  

這可能嗎?

+0

'這可能嗎?',你有沒有嘗試過嗎? –

+1

Ofcourse我試過了。我收到「無效的列total_price」消息。 是我試圖完成的可能嗎? – Khronos

+4

不在同一查詢中 - 查詢處理器不能使用輸出列作爲輸入列。您需要每次都寫出公式,或者進行內部查詢,該查詢計算一級計算列,然後從該查詢中進行選擇,計算下一級公式。 – Arvo

回答

11

不,不可能引用在同一級別定義的列別名。出現在相同邏輯查詢處理階段的表達式爲evaluated as if at the same point in time

As Joe Celko says

事情發生「一下子」,在SQL,而不是「從左至右」,因爲他們 會在一個連續的文件/程序語言模型

你可以將其定義在CTE中,然後在CTE之外重新使用它。

WITH T 
    AS (SELECT (price1 + price2 + price3) AS total_price, 
       price4 
     FROM prices) 
SELECT total_price, 
     (price4 + total_price) AS total_price2 
FROM T 
1
select T.total_price, 
     P.price4 + T.total_price as total_price2 
from prices as P 
    cross apply (select P.price1 + P.price2 + P.price3) as T(total_price) 
3

我也考慮在桌子上computed column如果將經常使用

ALTER TABLE prices ADD 
    total_price AS (price1 + price2 + price3) 

那麼你的查詢是

select 
    total_price, 
    (price4 + total_price) as total_price2 
from prices 

這樣,你可以申請D RY原則......