トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
8-35 小計を含むpivot
SQLパズル
PivotWithTotalテーブル
mgr DNo Val
---- --- ----
7566 20 6000
7698 30 6550
7782 10 1300
7788 20 1100
7839 10 2450
7839 20 2975
7839 30 2850
7902 20 800
mgrごとの各DNoのValの値と、
合計を下記の形式で出力する。
出力結果
mgr D10 D20 D30 Total
---- ---- ----- ---- -----
7566 0 6000 0 null
7698 0 0 6550 null
7782 1300 0 0 null
7788 0 1100 0 null
7839 2450 2975 2850 null
7902 0 800 0 null
null 3750 10875 9400 24025
SQLクックブックのレシピ12.20を参考にさせていただきました
データ作成スクリプト
create table PivotWithTotal(mgr,DNo,Val) as
select 7566,20,6000 from dual union all
select 7698,30,6550 from dual union all
select 7782,10,1300 from dual union all
select 7788,20,1100 from dual union all
select 7839,10,2450 from dual union all
select 7839,20,2975 from dual union all
select 7839,30,2850 from dual union all
select 7902,20, 800 from dual;
SQL
select mgr,
sum(decode(DNo,10,Val,0)) as D10,
sum(decode(DNo,20,Val,0)) as D20,
sum(decode(DNo,30,Val,0)) as D30,
case grouping(mgr)
when 1 then sum(Val) end as Total
from PivotWithTotal
group by grouping sets(mgr,())
order by mgr;
解説
grouping setsの使いどころですね。