引用where子句SQL中的计算列

tsc*_*ock 15 sql sql-server-2008-r2

这行代码是我的select语句的一个片段.

frdFreedays - DateDiff(dd,conReceiptToStock,GetDate()) As FreeDaysRemaining
Run Code Online (Sandbox Code Playgroud)

下面是我的where子句的片段

and frdFreedays - DateDiff(dd,conReceiptToStock,GetDate()) <= @intFreeDays
Run Code Online (Sandbox Code Playgroud)

我的问题是如何引用FreeDaysRemaining列,因此我可以将它与@进行比较intFreeDays

我正在寻找这样的东西

Freedays <= @intFreeDays
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 21

除了以外的任何地方都不能引用别名ORDER BY.一种解决方法(除了重复表达式的明显可能性之外)是将它放在派生表中:

SELECT FreeDaysRemaining --, other columns
FROM
(
  SELECT frdFreedays - DATEDIFF(DAY, conReceiptToStock, GETDATE()) AS FreeDaysRemaining
    --, other columns
  FROM ...
) AS x
WHERE FreeDaysRemaining <= @intFreeDays;
Run Code Online (Sandbox Code Playgroud)


小智 8

除了Aaron的答案,您还可以使用公用表表达式:

;with cte_FreeDaysRemaining as
    (
        select
            frdFreedays - DateDiff(dd,conReceiptToStock,GetDate()) As FreeDaysRemaining
            --, more columns
        from yourtable
    )
    select
        FreeDaysRemaining
        --, more columns
    from cte_FreeDaysRemaining
    where FreeDaysRemaining <= @intFreeDays
Run Code Online (Sandbox Code Playgroud)