我正在尝试编写这个select语句。
我的选择语句包含一个联接,它返回虚构员工的所有名字和姓氏,他们的部门名称,我正在尝试按各自的部门对这些人进行分组。这是我写的代码:
select e.First_Name,e.Last_Name,Department_Name
from EMPLOYEES e
join DEPARTMENTS
on e.Department_Id = DEPARTMENTS.Department_Id
group by Department_Name
这是我收到的错误消息:
Msg 8120,Level 16,State 1,Line 1 列'EMPLOYEES.First_Name'是 因为它在选择列表中无效 不包含在任何一个 聚合函数或GROUP BY 子句。
理解这个错误的最佳方法是什么?
感谢您的帮助
答案 0 :(得分:1)
在列/列上使用group by时,按列/列进行SQL汇总。在部门级别请求/选择employee_name是无效的,因为在给定部门中可能有许多员工。
如果您想在每个部门看到员工,您不需要分组 - 您可以改为使用订单,如下所示
select e.First_Name,e.Last_Name,Department_Name
from EMPLOYEES e join DEPARTMENTS on e.Department_Id = DEPARTMENTS.Department_Id order by Department_Name
答案 1 :(得分:0)
试试这个
select e.First_Name,e.Last_Name,d.Department_Name
from EMPLOYEES e
join DEPARTMENTS d
on e.Department_Id = d.Department_Id
group by e.First_Name,e.Last_Name,d.Department_Name
答案 2 :(得分:0)
看起来您可能真的在寻找order by
子句。
SELECT
e.First_Name,
e.Last_Name,
d.Department_Name
FROM EMPLOYEES e
INNER JOIN DEPARTMENTS d
ON e.Department_Id = d.Department_Id
ORDER BY Department_Name
错误消息为您提供了所需的所有详细信息 - 员工First_Name
(以及Last_Name
也是如此)未包含在聚合函数或group by
子句中。如果您要在First_Name
子句中同时包含Last_Name
和group by
,那么您可能不会看到与原始查询之间的任何差异,除非您有多个人与同一部门中的其他人具有相同名字和姓氏的部门。在这种情况下,两个元组将被分组到结果集中的一个结果
答案 3 :(得分:0)
使用GROUP BY子句时,SELECT语句只能包含GROUP BY子句中使用的列或聚合。
如果您想分组'Department_Name',则每个部门在结果中显示为单行,因此不能在一行中包含多个员工姓名。
如果您想要在其部门的订单中使用名字,姓氏,部门名称......
你应该 GROUP BY所有3列,而Department_Name是第一个
select e.First_Name,e.Last_Name,d.Department_Name
from EMPLOYEES e
join DEPARTMENTS d
on e.Department_Id = d.Department_Id
group by e.First_Name,e.Last_Name,d.Department_Name
[OR]您可以使用 ORDER BY 语句。
select e.First_Name,e.Last_Name,d.Department_Name
from EMPLOYEES e
join DEPARTMENTS d
on e.Department_Id = d.Department_Id
order by d.Department_Name