繁体   English   中英

添加到分组依据时,无效的列名称错误

[英]Invalid column name error when adding to Group By

我的Select语句中有此内容,需要添加到我的GROUP BY中

,cast(year(getdate()) as nvarchar(4))+cast(DATEPART(QUARTER,getdate()) as nvarchar(1))+'Q' mQuarter

当我将mQuarter列添加到Group by时,出现错误:

消息207,第16级,州1,第27行
无效的列名“ mQuarter”

如果查看SELECT语句的文档 ,您会看到GROUP SELECT在SELECT语句之前进行了评估,因此您在SELECT中使用别名的任何列在GROUP BY中都不存在。 您需要做的就是整件事:

GROUP BY cast(year(getdate()) as nvarchar(4)) +
         cast(DATEPART(QUARTER,getdate()) as nvarchar(1))

*编辑*

由于您没有引用表中的任何列,因此无需在GROUP BY子句中包含mQuarter。 如果将其删除,则不会看到错误; 但是,如果看不到查询的其余部分,我不确定它是否会返回您要查找的结果。 它只会在每一行中返回20183Q。


Select语句实际上从FROM子句开始处理,并以语句的SELECT部分​​结束。 这意味着查询是从FROM开始读取的,然后是GROUP BY,然后是WHERE ...,最后读取SELECT。 这意味着GROUP BY只能引用FROM子句中存在的列。 因此,您收到错误消息“消息207,级别16,状态1,行27”无效的列名“ mQuarter”,因为直到您的SELECT语句才存在“ mQuarter”。 因此,从本质上讲,您还必须在GROUP BY中重现“ mQuarter”列,以使其正常工作。

GROUP BY cast(year(getdate())as nvarchar(4))+ cast(DATEPART(QUARTER,getdate())as nvarchar(1))+'Q'

使用括号。 但是,可以通过消除一些强制转换来简化此操作:

( datename(year, getdate()) +
  datename(quarter, getdate()) +
  'Q'
) as mQuarter

datename()是一个方便的函数,因为它返回的是字符串而不是数字。 您唯一需要注意的是使用month ,因为返回了月份名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM