引用where子句SQL中的计算列

时间:2012-03-15 13:35:23

标签: sql sql-server-2008-r2

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

frdFreedays - DateDiff(dd,conReceiptToStock,GetDate()) As FreeDaysRemaining

以下是我的where子句

的摘录
and frdFreedays - DateDiff(dd,conReceiptToStock,GetDate()) <= @intFreeDays

我的问题是如何引用FreeDaysRemaining列,以便将其与@ intFreeDays进行比较

我正在寻找类似的东西

Freedays <= @intFreeDays

2 个答案:

答案 0 :(得分:21)

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

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

答案 1 :(得分: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