我正在进行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'
答案 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子句都是按指定顺序执行的
FROM子句
WHERE子句
GROUP BY子句
HAVING子句
SELECT子句
ORDER BY子句
因为你的列别名是在HAVING
子句之后定义的,所以你会得到无效的列名错误,因为该列在技术上尚未存在。