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

Sql 列'*';在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中,sql,sql-server,aggregate-functions,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

我有一个问题如下

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
但当我执行上述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.
预期结果:

上面的sql有什么问题吗?

使用子查询

SELECT Z.EmployeeName,Z.Departments FROM (
   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
) Z
group by Z.EmployeeName, Z.Departments

我想这是因为GROUPBY子句中缺少EmployeeID列。子查询中指定的列也应包含在GROUPBY子句中

请尝试:

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