2017-08-01 138 views
4

是否可以使用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

+0

尝试群与立方体或汇总 –

+1

@RenatoAfonso,你能提出更具体的东西吗?在问这个问题之前,我尝试了多维数据集和汇总 - 没有成功。 –

+0

选择 PRODUCTLINE, EMPLOYEEID, salesDate, 周一=月(salesdate) 年=年(salesdate) 总和(salesTotal)作为salesTotal 从 #tbl_data 组由立方体(PRODUCTLINE,雇员,salesdate ,周一,年) –

回答

5

你可以使用:

;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

+0

感谢您的快速响应,Iad2025!它非常接近。你如何在一个月内为员工分组保释金?请参阅我的屏幕截图,红色大箭头指向哪里。 –

+1

我明白了。只需简单地添加(productLine,employeeId,mon)分组集 –