如何在SQL Server中的SELECT中使用先前的计算?

时间:2012-06-07 20:43:52

标签: sql-server ms-access

我在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中使用(命名)计算?我做了一些相当大的计算,并希望在其他计算中建立这些值。为此添加额外的视图/子选择感觉很蠢......

感谢任何帮助! : - )

1 个答案:

答案 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)