我在MS Access上工作过一段时间,但我不是SQL Server的专家。而现在我发现了一个困扰我的差异。 (我正在使用SQL Server 2008.)
我正在SELECT中进行一些计算,并希望在下一个计算中使用一个计算的结果。
假设我们有一个表有两个字段的产品 - 名称和价格。在MS Access中,此查询正常工作:
SELECT Name, Price * 2 AS DoublePrice, DoublePrice * 2 AS QuadPrice
FROM Products
即。我使用下一个计算的结果。这给出了我期望的结果 - 名称+价格的两倍+价格的四倍。
但是这不会在SQL Server下编译 - 我在第二次计算中得到一个“unknown field:DoublePrice”-error。
有没有办法让这项工作?即稍后在同一个SELECT中使用(命名)计算?我做了一些相当大的计算,并希望在其他计算中建立这些值。为此添加额外的视图/子选择感觉很蠢......
感谢任何帮助! : - )
答案 0 :(得分: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)