我的Select语句中有此内容,需要添加到我的GROUP BY
,cast(year(getdate()) as nvarchar(4))+cast(DATEPART(QUARTER,getdate()) as nvarchar(1))+'Q' mQuarter
当我将mQuarter列添加到Group by时,出现错误:
第207层,状态1,第1行,第27行
无效的列名“ mQuarter”
答案 0 :(得分:2)
如果您查看Documentation for SELECT statement,您会看到GROUP BY在SELECT语句之前进行了评估,因此您在SELECT中使用别名的任何列在GROUP BY中都不存在。您需要做的就是整件事:
GROUP BY cast(year(getdate()) as nvarchar(4)) +
cast(DATEPART(QUARTER,getdate()) as nvarchar(1))
答案 1 :(得分: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'
答案 2 :(得分:0)
使用括号。但是,可以通过消除某些强制转换来简化此操作:
( datename(year, getdate()) +
datename(quarter, getdate()) +
'Q'
) as mQuarter
datename()
是一个方便的函数,因为它返回的是字符串而不是数字。唯一需要注意的是使用month
,因为返回了月份名称。