【SQL Server】PIVOT句

SQL Server
この記事は約4分で読めます。

PIVOT句とは

『PIVOT』は軸になるとか中心になるとかいう意味で、縦と横を入れ替えたり。表を見やすくするために使います。

基本形はこんな感じ

SELECT
    カラム名,  
    グループ化対象列の値1,
    グループ化対象列の値2,
    ・・・
FROM テーブル名
PIVOT (
    集計関数(集計対象列)
    FOR グループ化対象列
    IN (グループ化対象列の値1, グループ化対象列の値2, ・・・)
) AS 別名

実際にやってみます。

準備
--テーブルの準備
CREATE TABLE 売上
(
     日付   date
    ,商品   varchar(20)
    ,金額   int
);
  
--データの準備
INSERT INTO 売上 VALUES ('2020/7/1', 'みかん', 100 ) ;
INSERT INTO 売上 VALUES ('2020/7/1', 'みかん', 200 ) ;
INSERT INTO 売上 VALUES ('2020/7/1', 'バナナ', 300 ) ;
INSERT INTO 売上 VALUES ('2020/7/2', 'みかん', 100 ) ;
INSERT INTO 売上 VALUES ('2020/7/2', 'バナナ', 300 ) ;
INSERT INTO 売上 VALUES ('2020/7/3', 'みかん', Null ) ;
INSERT INTO 売上 VALUES ('2020/7/3', 'バナナ', 0 ) ;
INSERT INTO 売上 VALUES ('2020/7/3', 'みかん'  , 100 ) ;
INSERT INTO 売上 VALUES ('2020/7/3', 'もも'  , 20 ) ;
INSERT INTO 売上 VALUES ('2020/7/3', 'もも'  , 10 ) ;
INSERT INTO 売上 VALUES ('2020/7/4', 'みかん'  , 1000 ) ;

SELECT * FROM 売上 ORDER BY 日付,商品
日付 商品 金額
2020/7/1 バナナ 300
2020/7/1 みかん 100
2020/7/1 みかん 200
2020/7/2 バナナ 300
2020/7/2 みかん 100
2020/7/3 バナナ 0
2020/7/3 みかん 100
2020/7/3 みかん NULL
2020/7/3 もも 20
2020/7/3 もも 10
2020/7/4 みかん 1000

日付と商品と金額を持つ売上テーブルです。

日付別に商品がいくら売れたかを求めたい

集計関数のSUM関数を使います。

SELECT 日付,商品,SUM(金額) AS 金額 FROM 売上 
GROUP BY 日付,商品 ORDER BY 日付,商品

2020/7/1 バナナ 300
2020/7/1 みかん 300
2020/7/2 バナナ 300
2020/7/2 みかん 100
2020/7/3 バナナ 0
2020/7/3 みかん 100
2020/7/3 もも 30
2020/7/4 みかん 1000

まあ欲しい情報ではあるんですが、見にくい…。

ってことでPIVOT句を使って縦と横を並べかえつつ集計もして見やすくします。

SELECT
     商品
    ,[2020/7/1] AS [7/1]
    ,[2020/7/2] AS [7/2]
    ,[2020/7/3] AS [7/3]
    ,[2020/7/4] AS [7/4]
    ,[2020/7/5] AS [7/5]
FROM
    売上
PIVOT ( SUM( 金額 )  FOR 日付 IN ([2020/7/1], [2020/7/2], [2020/7/3], [2020/7/4], [2020/7/5])) AS ピボットテーブル
ORDER BY 商品 ;
商品 7/1 7/2 7/3 7/4 7/5
バナナ 300 300 0 NULL NULL
みかん 300 100 100 1000 NULL
もも NULL NULL 30 NULL NULL

売上のない日も表示されるので、分かりやすいですね。

コメント

タイトルとURLをコピーしました