簡體   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