获取错误sql server中的列名称天数无效

时间:2018-02-05 08:53:41

标签: sql sql-server

我正在进行sql查询,当我运行查询时收到错误Invalid column name 'days'.,有人可以帮助我,为什么我会收到这样的错误,看起来有问题,但仍然无法解决它,这是我的查询

SELECT
    COUNT(*) AS total
FROM
(
    SELECT *, ABS(DATEDIFF(day, GETDATE(), EpStart)) AS [days]
    FROM tb_Episode
    HAVING [days] <= ''
) AS episodes 
WHERE
    (episodes.EOEClaimDate is NULL or episodes.EOEClaimDate = '0000-00-00') AND
    episodes.PayerType = 'Ep' AND
    episodes.EpEnd < '2018-02-05' AND
    episodes.CustID = '27'

2 个答案:

答案 0 :(得分:2)

您无法在HAVING子句中使用您所在领域的别名。

为什么使用HAVING代替WHERE

HAVING

存在WHERE的相同限制

所以你的查询将成为:

FROM
(
    SELECT *, ABS(DATEDIFF(day, GETDATE(), EpStart)) AS [days]
    FROM tb_Episode
    WHERE ABS(DATEDIFF(day, GETDATE(), EpStart)) <= ''
) AS episodes 

答案 1 :(得分:2)

根据this answer @Codo,您不能在别名/虚拟列上使用HAVING,因为每个SQL子句都是按指定顺序执行的

  1. FROM子句

  2. WHERE子句

  3. GROUP BY子句

  4. HAVING子句

  5. SELECT子句

  6. ORDER BY子句

  7. 因为你的列别名是在HAVING子句之后定义的,所以你会得到无效的列名错误,因为该列在技术上尚未存在。