トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

10-256 キーブレイクごとに小計を出力

SQLパズル

GradeTable
ID  grade  score
--  -----  -----
 1  A      3
 1  A      3
 2  A      2
 2  B      1
 2  B      3
 3  C      1
 3  C      2
 3  C      6

IDのブレークごとに小計を出力する。

出力結果
ID  grade  score
--  -----  -----
 1  A      3
 1  A      3
 1  SubSum 6
 2  A      2
 2  B      1
 2  B      3
 2  SubSum 6
 3  C      1
 3  C      2
 3  C      6
 3  SubSum 9

こちらを参考にさせていただきました(英語)


データ作成スクリプト

create table GradeTable(ID,grade,score) as
select 1,'A',3 from dual union all
select 1,'A',3 from dual union all
select 2,'A',2 from dual union all
select 2,'B',1 from dual union all
select 2,'B',3 from dual union all
select 3,'C',1 from dual union all
select 3,'C',2 from dual union all
select 3,'C',6 from dual;


SQL

select ID,
case grouping(grade) when 1 then 'SubSum'   else grade end as grade,
case grouping(score) when 1 then sum(score) else score end as score
  from GradeTable
group by grouping sets((ID,grade,score,RowNum),ID)
order by ID,grade,score;


解説

単純case式を使うと読みやすいと思います。

7-32 キーブレイク時に、指定行を出力その1
7-33 キーブレイク時に、指定行を出力その2