我在select中创建了一个列;我该如何在哪里使用它?

时间:2015-03-03 17:17:22

标签: sql sql-server sql-server-2012

我在select语句中创建了一个列(DaysSinceCheck)。

如何在WHERE条款中使用它?

SELECT DISTINCT
    Name,
    (DATEDIFF(D, max(lastDaTe), GETDATE())) AS DaysSinceCheck
FROM  
    event_table
WHERE
    cust = 'usa'
    AND ((DATEDIFF(D, max(lastDaTe), GETDATE()))) <= 2
GROUP BY 
    Name

收到错误:

  

聚合可能不会出现在WHERE子句中,除非它位于HAVING子句或选择列表中包含的子查询中,并且要聚合的列是外部引用。

2 个答案:

答案 0 :(得分:3)

使用HAVING子句测试聚合函数的值。

...
WHERE cust = 'usa'
GROUP BY Name
HAVING ((DATEDIFF(D, max(lastDaTe), GETDATE()))) <= 2

答案 1 :(得分:0)

HAVING解决方案运行良好......另一种方法是使用CTE将事物分成两部分:

WITH NameAndDays AS (
    SELECT DISTINCT Name,
           (DATEDIFF(D, max(lastDaTe), GETDATE())) AS DaysSinceCHECK
      FROM event_table
     WHERE cust = 'usa'
     GROUP BY Name
) SELECT * 
    FROM NameAndDays
   WHERE DaysSinceCHECK <= 2