2017-08-01 19 views
4

GROUPING SETSを使用して日付、月、および年をロールアップすることができます。日付が表示され、月と年にグループ化され、月と年の値が代わりに表示されますof of 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、より具体的な何かを提案できますか?ここで質問をする前に、キューブとロールアップを成功させました。 PRODUCTLINE、 EMPLOYEEID、 SALESDATE、 月=月(SALESDATE)、 年=年(SALESDATE)、キューブ(PRODUCTLINE、社員、SALESDATEによって #tbl_data グループからsalesTotal として 合計(salesTotal)を選択し –

+0

、mon、yr) –

答えて

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)を単に追加するだけです –

関連する問題