1

我使用过 MS Access,但我不是 SQL Server 专家。现在我发现了一个令我困惑的不同之处。(我使用的是 SQL Server 2008。)

我正在 SELECT 中进行一些计算,并希望在下一个计算中使用一个计算的结果。

假设我们有一个包含两个字段的产品表 - 名称和价格。在 MS Access 中,此查询工作正常:

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

即我在下一个使用第一个计算的结果。这给出了我期望的结果-名称+价格的两倍+价格的四倍。

但这不会在 SQL Server 下编译 - 我在第二次计算中得到一个“未知字段:DoublePrice”错误。

有什么办法可以使这项工作?即稍后在同一个SELECT 中使用(命名)计算?我做了一些相当大的计算,并希望在其他计算中建立这些值。并且为此添加额外的视图/子选择感觉很愚蠢......

感谢您的帮助!:-)

4

1 回答 1

1

不,不是直接的。您可以使用派生表、CTE、aCROSS 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)
于 2012-06-07T21:00:00.503 回答