sql-server - 按年、月、日对集合进行分组

标签 sql-server tsql grouping-sets

是否可以使用GROUPING SETS汇总日期、月份和年份,其中显示日期并分组为月份和年份,并且显示月份和年份的值而不是为null

这是示例数据,以及我使用分组集的尝试

create table #tbl_data
(
employeeId int
,productLine int
,salesDate datetime
,salesTotal money
)

insert into #tbl_data
values
(1,1,'02/09/2017',199)
,(1,1,'04/10/2017',379)
,(2,1,'04/21/2017',323)
,(2,1,'04/10/2017',461)
,(2,1,'06/11/2017',304)
,(3,1,'01/28/2017',147)
,(3,1,'02/09/2017',320)
,(4,1,'03/07/2017',344)
,(4,1,'03/13/2017',176)

select
    productLine, 
    employeeId, 
    salesDate, 
    mon=month(salesdate),
    yr=year(salesdate), 
    sum(salesTotal) as salesTotal
from 
    #tbl_data

group by grouping sets
(
    (productLine, employeeId, salesDate)
    ,(productLine, employeeId)
    ,(productLine)
)

这是查询返回的内容(左)和我想要完成的内容(右)

enter image description here

最佳答案

您可以使用:

;WITH cte AS (
  select
    productLine, 
    employeeId, 
    salesDate, 
    mon=month(salesdate),
    yr=year(salesdate),
    salesTotal
  from #tbl_data   
)
select
    productLine, 
    employeeId, 
    salesDate, 
    mon,
    yr ,
    sum(salesTotal) as salesTotal
from cte
group by grouping sets
(
     (productLine, employeeId, salesDate, yr)
    ,(productLine, employeeId, yr)
    ,(productLine)
    ,(productLine, mon, yr)
);

<强> Rextester Demo

关于sql-server - 按年、月、日对集合进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45430557/

相关文章:

sql - Decimal(19,4) 或 Decimal(19.2) - 我应该使用哪个?

sql-server - Spark 和 MSSQL 插入速度

postgresql - 如何从 postgres 分组集查询中删除空值

sql - SELECT 为局部变量赋值并再次引用它。 SQL Server 保证结果吗?

c# - 展平复合实体

c# - 如何在 t-sql 中使用 where 子句计算过滤后的行数?

sql-server - 如何跟踪相应存储过程中的哪个查询正在执行

sql-server - 在 SQL 查询中汇总拆分范围

sql - postgresql,命名分组集?