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有什么问题?
我认为这是因为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)