2012-06-07 77 views
1

我已經使用了MS Access,但我不是SQL Server的專家。現在我發現了一個令我困惑的區別。 (我正在使用SQL Server 2008.)如何在SQL Server的SELECT中使用以前的計算?

我在SELECT中做了一些計算,並且想要在下一個計算中使用結果。

比方說,我們有一個表產品有兩個字段 - 名稱和價格。在MS Access中,此查詢工作正常:

SELECT Name, Price * 2 AS DoublePrice, DoublePrice * 2 AS QuadPrice 
    FROM Products 

即使我使用下一個計算的結果。這給我期望的結果 - 名字+價格的兩倍+價格的四倍。

但這不會在SQL Server下編譯 - 第二次計算中出現「未知字段:DoublePrice」 - 錯誤。

有什麼辦法可以使這項工作?即在相同的SELECT中稍後使用(命名)計算?我做了一些相當大的計算,並希望在其他計算中構建這些值。它感覺很愚蠢,只是爲了增加一個額外的視圖/子SELECT ...

感謝任何幫助! :-)

回答

1

不,不是直接。無論是使用派生表,CTE,CROSS APPLY或甚至重新計算:

-- derived table 
SELECT *, DoublePrice * 2 AS QuadPrice 
FROM ( SELECT Name, Price * 2 AS DoublePrice 
     FROM Products) P 

-- CTE 
;WITH CTE AS 
(
    SELECT Name, Price * 2 AS DoublePrice 
    FROM Products 
) 
SELECT *, DoublePrice * 2 AS QuadPrice 
FROM CTE 

-- Just do the calculation again 
SELECT Name, Price * 2 AS DoublePrice, (Price * 2) * 2 AS QuadPrice 
FROM CTE 

-- CROSS APPLY 
SELECT *, 2 * DoublePrice AS QuadPrice 
FROM Products P 
CROSS APPLY (SELECT 2 * Price) AS T(DoublePrice) 
相關問題