使用case when高級用法對數據庫進行行列轉化 分組、聚合函數使用

看下原來代碼:



將kpi_name這一列進行在一行顯示



一、不用分組、聚合函數

--測試不用聚合分組函數

select 
kpi_date,
tyt_name,
 (case when kpi_name='換卡' then kpi_value end ) G4指標,
 (case when kpi_name='換卡' then num_value  end ) G4完成數,
( (case when kpi_name='換卡' then num_value end )/ (case when kpi_name='換卡' then kpi_value  end )) G4完成率,

 (case when kpi_name='流量包新增' then kpi_value end ) 流量包新增指標,
 (case when kpi_name='流量包新增' then num_value  end ) 流量包新增完成數,
( (case when kpi_name='流量包新增' then num_value end )/ (case when kpi_name='流量包新增' then kpi_value  end ))  流量包新增完成率,

 (case when kpi_name='飛享遷移' then kpi_value end ) 飛享遷移指標,
 (case when kpi_name='飛享遷移' then num_value  end ) 飛享遷移完成數,
( (case when kpi_name='飛享遷移' then num_value end )/ (case when kpi_name='飛享遷移' then kpi_value  end )) 飛享遷移完成率,

 (case when kpi_name='流量包提檔' then kpi_value end ) 流量包提檔指標,
 (case when kpi_name='流量包提檔' then num_value  end )  流量包提檔完成數,
( (case when kpi_name='流量包提檔' then num_value end )/ (case when kpi_name='流量包提檔' then kpi_value  end )) 流量包提檔完成率,

 (case when kpi_name='寬帶' then kpi_value end ) 寬帶指標,
 (case when kpi_name='寬帶' then num_value  end ) 寬帶完成數,
 (case when kpi_name='寬帶電視' then kpi_value end ) 寬帶電視指標,
 (case when kpi_name='寬帶電視' then num_value  end ) 寬帶電視完成數,
 (case when kpi_name='寬帶含電視' then kpi_value end ) 寬帶含電視指標,
 (case when kpi_name='寬帶含電視' then num_value  end ) 寬帶含電視完成數,
( (case when kpi_name='寬帶含電視' then num_value end )/ (case when kpi_name='寬帶含電視' then kpi_value  end )) 寬帶含電視完成率,

 (case when kpi_name='手廳' then kpi_value end ) 手廳指標,
 (case when kpi_name='手廳' then num_value  end ) 手廳完成數,
( (case when kpi_name='手廳' then num_value end )/ (case when kpi_name='手廳' then kpi_value  end )) 手廳完成率
from sbf_rpt_yy_daily@sxyw
where tyt_name is not null and type='1' AND kpi_date='20150920'
order by kpi_date desc,decode(tyt_name,'合計','終合計',tyt_name);

最終結果:



顯然,因爲使用了case when 語句,所以,造成了不同數據顯示在不同行的情況的出現。

所以,需要將不同行的數據合併到一行去,就需要聚合函數(分組函數必須和聚合函數同時使用)


二、使用分組,聚合函數


--now hjy
select 
kpi_date,
tyt_name,
sum(case when kpi_name='換卡' then kpi_value end ) G4指標,
sum(case when kpi_name='換卡' then num_value  end ) G4完成數,
(sum(case when kpi_name='換卡' then num_value end )/sum(case when kpi_name='換卡' then kpi_value  end )) G4完成率,

sum(case when kpi_name='流量包新增' then kpi_value end ) 流量包新增指標,
sum(case when kpi_name='流量包新增' then num_value  end ) 流量包新增完成數,
(sum(case when kpi_name='流量包新增' then num_value end )/sum(case when kpi_name='流量包新增' then kpi_value  end ))  流量包新增完成率,

sum(case when kpi_name='飛享遷移' then kpi_value end ) 飛享遷移指標,
sum(case when kpi_name='飛享遷移' then num_value  end ) 飛享遷移完成數,
(sum(case when kpi_name='飛享遷移' then num_value end )/sum(case when kpi_name='飛享遷移' then kpi_value  end )) 飛享遷移完成率,

sum(case when kpi_name='流量包提檔' then kpi_value end ) 流量包提檔指標,
sum(case when kpi_name='流量包提檔' then num_value  end )  流量包提檔完成數,
(sum(case when kpi_name='流量包提檔' then num_value end )/sum(case when kpi_name='流量包提檔' then kpi_value  end )) 流量包提檔完成率,

sum(case when kpi_name='寬帶' then kpi_value end ) 寬帶指標,
sum(case when kpi_name='寬帶' then num_value  end ) 寬帶完成數,
sum(case when kpi_name='寬帶電視' then kpi_value end ) 寬帶電視指標,
sum(case when kpi_name='寬帶電視' then num_value  end ) 寬帶電視完成數,
sum(case when kpi_name='寬帶含電視' then kpi_value end ) 寬帶含電視指標,
sum(case when kpi_name='寬帶含電視' then num_value  end ) 寬帶含電視完成數,
(sum(case when kpi_name='寬帶含電視' then num_value end )/sum(case when kpi_name='寬帶含電視' then kpi_value  end )) 寬帶含電視完成率,

sum(case when kpi_name='手廳' then kpi_value end ) 手廳指標,
sum(case when kpi_name='手廳' then num_value  end ) 手廳完成數,
(sum(case when kpi_name='手廳' then num_value end )/sum(case when kpi_name='手廳' then kpi_value  end )) 手廳完成率
from sbf_rpt_yy_daily@sxyw
where tyt_name is not null and type='1'
group by kpi_date,tyt_name
order by kpi_date desc,decode(tyt_name,'合計','終合計',tyt_name);




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章