声明SELECT中使用的变量会引发异常

时间:2015-08-04 14:22:09

标签: tsql

我有以下代码:

DECLARE @d AS INT
SELECT @d = DATEDIFF(d, p.CreatedOn, GETDATE()),
    CASE
       WHEN @d <= 30 THEN
         @d * 5
       ELSE p.Count
    END Sort
FROM table p
ORDER BY Sort

这会抛出错误

  

为变量赋值的SELECT语句不能与数据检索操作结合使用。

我在WHEN中的实际公式非常复杂,所以我想我重复使用该变量,因为它使用了9或10次。有什么选择吗?

一旦这个工作,我实际上需要创建一个计算列,所以不确定是否可以在那里使用变量,但我猜是宝贝步骤。

1 个答案:

答案 0 :(得分:1)

您无法定义内联变量。如果要重用计算机列,请将其包装在CTE中:

;WITH
    cte AS
    (
        SELECT  *,
                DayCount = DATEDIFF(d, p.CretaedOn, GETDATE()) 
        FROM    table p
    )

SELECT      CASE
                WHEN DayCount <= 30 THEN DayCount * 5
                WHEN ...
            END         Sort
FROM        cte
ORDER BY    Sorc