列'*'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中

Use*_*384 4 sql sql-server aggregate-functions

我有一个如下查询

select a.EmployeeName, 

STUFF(( SELECT ',' + camTable.DepartmentName AS [text()]
                        FROM EmpoyeeDepartment subTable
                left join DepartmentTable camTable on subTable.DepartmentID = camTable.DepartmentID 
                        WHERE
                        subTable.EmployeeID = a.EmployeeID
                        FOR XML PATH('')
                        ), 1, 1, '' )
            AS Departments
from 
EmployeeTable a
where a.EmployeeID = 144025
group by EmployeeName, Departments
Run Code Online (Sandbox Code Playgroud)

但是当我执行上面的sql时,出现了一个错误:

Column 'EmployeeTable.EmployeeID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Run Code Online (Sandbox Code Playgroud)

预期结果:

在此输入图像描述

上面的sql有什么问题?

Tec*_*hDo 5

我认为这是因为group by子句中缺少EmployeeID列.子查询中指定的列也应包含在group by子句中.

请试试:

select a.EmployeeName, 

STUFF(( SELECT ',' + camTable.DepartmentName AS [text()]
                        FROM EmpoyeeDepartment subTable
                left join DepartmentTable camTable on subTable.DepartmentID = camTable.DepartmentID 
                        WHERE
                        subTable.EmployeeID = a.EmployeeID
                        FOR XML PATH('')
                        ), 1, 1, '' )
            AS Departments
from 
EmployeeTable a
where a.EmployeeID = 144025
group by EmployeeID, EmployeeName, Departments 
Run Code Online (Sandbox Code Playgroud)