2016-04-28 68 views
0

載我收到此錯誤:選擇查詢它是不是在聚合函數或GROUP BY子句

Msg 8120, Level 16, State 1, Procedure ReportEmployeesOnLeave, Line 17 Column 'Employee.EmployeeId' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

enter image description here

+0

'TotalAbsents'後不會錯過逗號嗎? –

+0

@GinoPane:不用擔心它的評論代碼。 –

+0

@Gino Pane bro此行已被評論。 –

回答

0

什麼錯誤信息你懂不?這是不言而喻的。意思是:如果使用group by,則所有選定的屬性必須位於group by或集合函數(COUNT(),SUM()等)中。

所以,如果你糾正你的group by你不應該有任何錯誤:

... 
GROUP BY TC.Date 
,   TC.DayName 
,   TC.DayType 
,   TC.ScheduleId 
,   TC.LeaveTaken 
,   TC.Remarks 
,   E.EmployeeId 
,   E.EmployeeNo 
,   E.Name 
,   E.ScheduleId 
,   C.BusinessName 

這是否給你正在尋找的結果,則是另一個問題。

對於將來的問題:請添加代碼作爲文本,而不是圖片。這樣回答者可以簡單地複製粘貼,而不是全部輸入。

編輯:如果你不想group by所有選定的屬性,您可以使用窗口函數(假設的SQL Server 2012或以上):

SELECT  * -- Everything you need 
,   COUNT(TC.AbsentCalculation) OVER(PARTITION BY E.Name, E.EmployeeId) AS AbsentCount 
,   SUM(TC.AbsentCalculation) OVER(PARTITION BY E.Name, E.EmployeeId) AS TotalAbsents 
FROM   ... 

你不會需要一個GROUP BY在所有如果你實現這一點。

+0

已嘗試配置文本格式,但我收到此驗證錯誤「您的文章似乎包含未正確格式化的代碼」從計算器。 –

+0

實際上,我想取2個日期之間的出席記錄,但我只是想按名稱和EmployeeId分組,如果我把每個選擇組中的我都無法得到這兩個日期之間所需的所有行。 –

+0

@QasimSarwar,請參閱編輯 – HoneyBadger

0

將所有字段寫入Group By原因

+0

實際上我想取得兩個日期之間的出席記錄,但我只是想按名稱和EmployeeId分組,如果我把每個選擇分組我都無法得到所需的所有行之間這些2日期。 –

+0

Group by有一條規則,您應該在「Group By」原因中寫入在select和from(即,獲取列)之間寫入的沒有集合函數的字段。 –

相關問題