2017-05-28 61 views
-2

我有一個表,當前擁有基於區域>區域>羣集>區域>段的銷售數據。我需要的是基本上得到的結果可以顯示在每個級別上的彙總。在TSQL中創建類似Pivot的Excel

select 
    TS.Cycle, 
    Segment, 
    Region, 
    Cluster, 
    Area, 
    TS.TargetDesc, 
    Sum(TS.Target) as TGT, 
    sum(A.Achivement) as ACH, 
    0 as [lvl] 
from MST_TargetSetup TS 
join MST_AchivementSetup A on 
    TS.TargetDesc = A.AchivementDesc and Ts.TargetType='T' and 
    A.AchivementType='T' and 
    (cast(Ts.Month as varchar(5))+'-'+cast(Ts.Year as varchar(5)))=(cast(A.Month as varchar(5))+'-'+cast(A.Year as varchar(5))) 
join MST_EmployeeMaster E on TS.TargetDesc=E.Terriory 
Group by TS.TargetDesc, Area, Cluster, Region, Segment, TS.Cycle 

上面的查詢給我下面的輸出:base output

現在作爲輸出什麼,我需要的是在每個級別彙總該

  1. 地區
  2. 集羣
  3. 區域
  4. TargetDesc

我嘗試過使用下面的不同分組聯盟,但它在頂部而不是每個級別的底部創建彙總。

select 
TS.Cycle,Segment,Region,Cluster,Area,TS.TargetDesc, Sum(TS.Target) as TGT,sum(A.Achivement) as ACH from MST_TargetSetup TS 
join MST_AchivementSetup A on TS.TargetDesc = A.AchivementDesc and Ts.TargetType='T' and A.AchivementType='T' and (cast(Ts.Month as varchar(5))+'-'+cast(Ts.Year as varchar(5)))=(cast(A.Month as varchar(5))+'-'+cast(A.Year as varchar(5))) 
join MST_EmployeeMaster E on TS.TargetDesc=E.Terriory 
Group by TS.TargetDesc,Area,Cluster,Region,Segment,TS.Cycle 
union 
select 
TS.Cycle,Segment,'' as Region,'' as Cluster,'' as Area,'' as TargetDesc, Sum(TS.Target) as TGT,sum(A.Achivement) as ACH from MST_TargetSetup TS 
join MST_AchivementSetup A on TS.TargetDesc = A.AchivementDesc and Ts.TargetType='T' and A.AchivementType='T' and (cast(Ts.Month as varchar(5))+'-'+cast(Ts.Year as varchar(5)))=(cast(A.Month as varchar(5))+'-'+cast(A.Year as varchar(5))) 
join MST_EmployeeMaster E on TS.TargetDesc=E.Terriory 
Group by Segment,TS.Cycle 
union 
select 
TS.Cycle,Segment,Region,'' as Cluster,'' as Area,'' as TargetDesc, Sum(TS.Target) as TGT,sum(A.Achivement) as ACH from MST_TargetSetup TS 
join MST_AchivementSetup A on TS.TargetDesc = A.AchivementDesc and Ts.TargetType='T' and A.AchivementType='T' and (cast(Ts.Month as varchar(5))+'-'+cast(Ts.Year as varchar(5)))=(cast(A.Month as varchar(5))+'-'+cast(A.Year as varchar(5))) 
join MST_EmployeeMaster E on TS.TargetDesc=E.Terriory 
Group by Segment,Region,TS.Cycle 
union 
select 
TS.Cycle,Segment,Region,cluster,'' as Area,'' as TargetDesc, Sum(TS.Target) as TGT,sum(A.Achivement) as ACH from MST_TargetSetup TS 
join MST_AchivementSetup A on TS.TargetDesc = A.AchivementDesc and Ts.TargetType='T' and A.AchivementType='T' and (cast(Ts.Month as varchar(5))+'-'+cast(Ts.Year as varchar(5)))=(cast(A.Month as varchar(5))+'-'+cast(A.Year as varchar(5))) 
join MST_EmployeeMaster E on TS.TargetDesc=E.Terriory 
Group by Segment,Region,cluster,TS.Cycle 
union 
select 
TS.Cycle,Segment,Region,Cluster,Area,'' as TargetDesc, Sum(TS.Target) as TGT,sum(A.Achivement) as ACH from MST_TargetSetup TS 
join MST_AchivementSetup A on TS.TargetDesc = A.AchivementDesc and Ts.TargetType='T' and A.AchivementType='T' and (cast(Ts.Month as varchar(5))+'-'+cast(Ts.Year as varchar(5)))=(cast(A.Month as varchar(5))+'-'+cast(A.Year as varchar(5))) 
join MST_EmployeeMaster E on TS.TargetDesc=E.Terriory 
Group by Segment,Region,Cluster,Area,TS.Cycle 

輸出:output with union

如果看到上面的輸出被彙總但工作作爲期望它們示出在每個詳細程度的頂部,而不是底部。

需要幫助做底部彙總。

回答

0

您所需要做的就是在您的基本輸出查詢中將您的group by子句更改爲group by grouping sets

Grouping Sets Documentation

您可能需要強制將NULL的值設爲空白,就像您在輸出中使用union一樣,但計算的值將在每個級別匹配。

答:

select 
    TS.Cycle, 
    Segment, 
    Region, 
    Cluster, 
    Area, 
    TS.TargetDesc, 
    Sum(TS.Target) as TGT, 
    sum(A.Achivement) as ACH, 
    0 as [lvl] 
from MST_TargetSetup TS 
join MST_AchivementSetup A on 
    TS.TargetDesc = A.AchivementDesc and Ts.TargetType='T' and 
    A.AchivementType='T' and 
    (cast(Ts.Month as varchar(5))+'-'+cast(Ts.Year as varchar(5)))=(cast(A.Month as varchar(5))+'-'+cast(A.Year as varchar(5))) 
join MST_EmployeeMaster E on TS.TargetDesc=E.Terriory 
Group by grouping sets 
    (
     (TS.TargetDesc, Area, Cluster, Region, Segment, TS.Cycle) --lowest level 
     , (Area, Cluster, Region, Segment, TS.Cycle) 
     , (Cluster, Region, Segment, TS.Cycle) 
     , (Region, Segment, TS.Cycle) 
     , (Segment, TS.Cycle) 
    )