我正在尝试使用T-sql 2008创建连接

时间:2010-06-26 23:49:29

标签: sql sql-server-2005 tsql sql-server-2008

我正在尝试编写这个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   子句。

理解这个错误的最佳方法是什么?

感谢您的帮助

4 个答案:

答案 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_Namegroup 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