[英]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.