我收到此错误:
Msg 8120,Level 16,State 1,Procedure ReportEmployeesOnLeave,第17行 列'Employee.EmployeeId'在选择列表中无效,因为它 不包含在聚合函数或GROUP BY中 子句。
答案 0 :(得分: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
。
答案 1 :(得分:0)
将所有字段写入Group By
原因