2017-08-01 135 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)分組集 –