HanbaiDay,SyouhinCodeごとのデータ件数とSuuryouの合計を求めてみます。
小計として、HanbaiDayごとの集計結果を取得し、総計として、全体行を対象とした集計結果も取得します。
select HanbaiDay,SyouhinCode,
count(*) as cnt,sum(Suuryou) as SumSuuryou
from LogTable
group by RollUp(HanbaiDay,SyouhinCode)
order by HanbaiDay,SyouhinCode;
出力結果
HanbaiDay SyouhinCode cnt SumSuuryou
---------- ----------- --- ----------
2011-06-30 AAA 3 9
2011-06-30 BBB 2 40
2011-06-30 CCC 2 716
2011-06-30 null 7 765
2011-07-01 BBB 2 400
2011-07-01 CCC 1 500
2011-07-01 null 3 900
2011-07-02 AAA 2 9
2011-07-02 null 2 9
null null 12 1674
group by句でgroup by RollUp(HanbaiDay,SyouhinCode) と指定することによって、HanbaiDay,SyouhinCodeごとの集計結果と、HanbaiDayごとの集計結果(小計)と、全体行を対象とした集計結果(総計)を、1つのselect文で取得しています。
HanbaiDay,SyouhinCodeごとのデータ件数とSuuryouの合計を求めてみます。
総計として、全体行を対象とした集計結果も取得します。
select HanbaiDay,SyouhinCode,
count(*) as cnt,sum(Suuryou) as SumSuuryou
from LogTable
group by RollUp((HanbaiDay,SyouhinCode))
order by HanbaiDay,SyouhinCode;
出力結果
HanbaiDay SyouhinCode cnt SumSuuryou
---------- ----------- --- ----------
2011-06-30 AAA 3 9
2011-06-30 BBB 2 40
2011-06-30 CCC 2 716
2011-07-01 BBB 2 400
2011-07-01 CCC 1 500
2011-07-02 AAA 2 9
null null 12 1674
group by句でgroup by RollUp((HanbaiDay,SyouhinCode)) と指定することによって、HanbaiDay,SyouhinCodeごとの集計結果と、全体行を対象とした集計結果(総計)を、1つのselect文で取得しています。
group by RollUp((HanbaiDay,SyouhinCode))のように、RollUpの列指定の括弧内で、複数列をカンマ区切りで記述し、RollUpの単位を複数列がまとまった単位にできます。(複合列と呼ばれます)