トップページ >  Oracle SQL >  rollup
初版2006/04/20: 最終更新日2006/04/20
  rollup
目次
rollup
rollupで複数カラム指定
rollup
rollupは、指定したカラムに基づいてデータをグループ化し、超集合行という行を生成します。
rollupは、group by句で指定します。
書式は以下のような書き方になります。

select   parts_no,sum(suryo)
from     table
groub by rollup(parts_no)

上記SQLは、parts_no毎のsuryoを表示しますが、このデータに対して最後に超集合行という小計値を表示する行を追加します。
group by句が、group by parts_noであった場合の結果が以下のようであったとします。

parts_no sum(suryo)
-------- ----------
aaa               2
bbb               3
ccc               3

rollupは、このデータに対して最終行に超集合行という小計値行を追加します。
上記のように結果が3件の場合、rollupを使用すると3(標準行)+1(超集合行)=4行となります。
したがって元のSQLの結果は以下のようになります。

parts_no sum(suryo)
-------- ----------
aaa               2
bbb               3
ccc               3
NULL              8   ←超集合行

この時、rollupで指定したparts_noはnullになります。

rollupで複数カラム指定
rollupで複数指定した場合、一番最初に指定したカラム毎に、二番目で指定したカラムをサマリーします。
その後、一番最初に指定したカラムごとの小計値を表示します。
以下のようなデータがあるとします。

client_cd parts_no sum(suryo)
--------- -------- ----------
001       aaa               2
001       aaa               3
001       bbb               1
002       bbb               3
002       bbb               3
003       ccc               3
003       ddd               3

このデータに対して以下のSQLを実行します。

select   client_cd,parts_no,sum(suryo)
from     table
groub by rollup(client_cd,parts_no)

上記SQLは、client_cd毎にparts_noをサマリーします。
そして、client_cd毎に超集合行を生成します。よって実行結果は以下のようになります。

client_cd parts_no sum(suryo)
--------- -------- ----------
001       aaa               5
001       bbb               1
001                         6   ←超集合行
002       bbb               6
002                         6   ←超集合行
003       ccc               3
003                         3   ←超集合行
003       ddd               3
003                         3   ←超集合行
                           18   ←超集合行