将具有相同值的多行合并为一行

时间:2018-11-07 21:14:14

标签: sql-server sql-server-2008

我正在做Northwind数据库的练习,并且编写了以下查询:

select 
    Employees.EmployeeID, year(Orders.OrderDate) as Year, 
    count(Employees.EmployeeID) as 'Total Orders'
from  
    Orders 
join 
    Employees on Orders.EmployeeID = Employees.EmployeeID
where 
    year(Orders.OrderDate) = '1996'
group by 
    Employees.EmployeeID, Orders.OrderDate
order by 
    Employees.EmployeeID asc

我得到以下输出:

EmployeeID | Year | Total Orders
-----------+------+--------------
1          |1996  | 1
1          |1996  | 1
1          |1996  | 2
1          |1996  | 1
1          |1996  | 1
....

我认为问题是year(Orders.OrderDate)的一部分,因为原始日期有月,日,...

任何帮助都将不胜感激!

2 个答案:

答案 0 :(得分:1)

尝试:

group by Employees.EmployeeID, year(Orders.OrderDate)

据我所知,您可以按功能分组。

编辑:另外,除非在子查询中首先对其进行评估,否则通常不能将代表函数的别名分组。

答案 1 :(得分:0)

每当使用group by子句时,我们都应使用select子句中没有别名的所有字段,因为它是聚合操作之外的

对于您而言,您的group by子句应为

按Employees.EmployeeID分组,年份(Orders.OrderDate)