こんにちは。

今回はSQL ServerのROLLUP句を紹介します。ROLLUP句はGROUP BYによる集計時に、同時に小計も表示することができる機能となっています。

またそのときに補助的に使う機能がGROUPING句になります。

  

以下の支店・顧客別の売上データを用いて説明していきます。

 

支店顧客売上
東京支店a2,000
東京支店a1,200
東京支店a1,200
東京支店b3,000
東京支店b300
東京支店c7,000
福岡支店d700
福岡支店d10,000
福岡支店e3,000
福岡支店e2,000
大阪支店a300
大阪支店f4,000
大阪支店f1,700
大阪支店f2,000
大阪支店g100
大阪支店g3,000
売上データ

    

 

 

●ROLLUP句

「各支店で全顧客が購入した売上の小計」を集計してみます。

GROUP BY句の中で合計したいカラム(今回は顧客)に対してROLLUP句を使うことで、通常のGROUP BYの集計に加えて、小計も表示することができます。

・コード

SELECT 
  支店,
  顧客,
  SUM(売上) as 売上
FROM 
  売上データ 
GROUP BY 
  支店,
  ROLLUP(顧客) ;

・出力

各支店の小計を出すことができました。

   

    

   

●GROUPING句

上で各支店の小計を出すことができましたが、顧客の小計部分がNULLになってしまうのが味気ないですね。

そこで顧客の小計部分に値を入れていきたいと思います。そのときに使える機能がGROUPING句になります。

  

GROUPING句はROLLUPで集計したカラムに対して使用すると、「小計した行に対しては1を、それ以外の行に対しては0を出力する機能」となっています。

そのため下記のようにCASE式と組み合わせて記載することで、小計した行を指定して値を入れることができます。

・コード

SELECT  
    支店,
    CASE WHEN GROUPING(顧客)=1 THEN 支店+'小計' ELSE 顧客 END AS 顧客,
    sum(売上) as 売上
FROM 
    売上データ
GROUP BY 
    支店, ROLLUP(顧客)

・出力

 各支店の小計行に値を入れることができました。

 

  

以上になります。

GROUPING句は他にも、CUBE句やGROUPING SETS句と組み合わせて使うことができます。

皆さんの参考になれば幸いです!

  

  

一覧へ戻る