我有這樣的查詢:使用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
這可能嗎?
我有這樣的查詢:使用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
這可能嗎?
不,不可能引用在同一級別定義的列別名。出現在相同邏輯查詢處理階段的表達式爲evaluated as if at the same point in time。
事情發生「一下子」,在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
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)
我也考慮在桌子上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原則......
'這可能嗎?',你有沒有嘗試過嗎? –
Ofcourse我試過了。我收到「無效的列total_price」消息。 是我試圖完成的可能嗎? – Khronos
不在同一查詢中 - 查詢處理器不能使用輸出列作爲輸入列。您需要每次都寫出公式,或者進行內部查詢,該查詢計算一級計算列,然後從該查詢中進行選擇,計算下一級公式。 – Arvo