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