选择查询它是不是在聚合函数或GROUP BY子句

问题描述:

载我收到此错误:选择查询它是不是在聚合函数或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此行已被评论。 –

什么错误信息你懂不?这是不言而喻的。意思是:如果使用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

将所有字段写入Group By原因

+0

实际上我想取得两个日期之间的出席记录,但我只是想按名称和EmployeeId分组,如果我把每个选择分组我都无法得到所需的所有行之间这些2日期。 –

+0

Group by有一条规则,您应该在“Group By”原因中写入在select和from(即,获取列)之间写入的没有集合函数的字段。 –