代码之家  ›  专栏  ›  技术社区  ›  Nikul Panchal

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

  •  -1
  • Nikul Panchal  · 技术社区  · 8 年前

    我正在处理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 回复  |  直到 8 年前
        1
  •  2
  •   Joe Taras    8 年前

    您不能在中使用 HAVING 子句字段的别名。

    为什么使用 而不是 WHERE ?

    相同的限制 存在于 哪里 ,

    因此,您的查询将变成:

    FROM
    (
        SELECT *, ABS(DATEDIFF(day, GETDATE(), EpStart)) AS [days]
        FROM tb_Episode
        WHERE ABS(DATEDIFF(day, GETDATE(), EpStart)) <= ''
    ) AS episodes 
    
        2
  •  2
  •   WhatsThePoint    8 年前

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

    1. FROM子句

    2. WHERE子句

    3. GROUP BY子句

    4. HAVING子句

    5. SELECT子句

    6. ORDER BY子句

    因为列别名是在 子句您将获得无效列名错误,因为该列在技术上尚不存在。