以下のような単純なテーブルを、
以下のようなクロス集計表の形で出力できます!
クロス集計表とは
「表側」と「表頭」を持つ「集計結果」を示した表です。
CASE式とは
標準SQLに含まれているモノです。
よってSQL Serverを含む全てのRDBMSで使用可能です。
CASE式を使用することで、テーブルのデータをクロス集計表の形で出力できます。
準備
以下のSQLを実行し、テーブルの作成/データの登録をします。
--テーブルの作成
CREATE TABLE sales
(
id CHAR(3) PRIMARY KEY,
productName VARCHAR(16),
price INTEGER NOT NULL,
saleDate DATE NOT NULL,
)
--データの登録
INSERT INTO sales VALUES('001','りんご','10','2019-01-01')
INSERT INTO sales VALUES('002','りんご','20','2019-01-02')
INSERT INTO sales VALUES('003','りんご','30','2019-01-03')
INSERT INTO sales VALUES('004','みかん','40','2019-01-04')
INSERT INTO sales VALUES('005','みかん','50','2019-01-05')
INSERT INTO sales VALUES('006','みかん','60','2019-01-06')
INSERT INTO sales VALUES('007','りんご','70','2019-02-01')
INSERT INTO sales VALUES('008','りんご','80','2019-02-02')
INSERT INTO sales VALUES('009','りんご','90','2019-02-03')
INSERT INTO sales VALUES('010','みかん','100','2019-02-04')
INSERT INTO sales VALUES('011','みかん','110','2019-02-05')
INSERT INTO sales VALUES('012','りんご','120','2020-01-01')
INSERT INTO sales VALUES('013','りんご','130','2020-01-02')
INSERT INTO sales VALUES('014','みかん','140','2020-01-03')
INSERT INTO sales VALUES('015','みかん','150','2020-01-04')
SQL
例として、ここでは以下のクロス集計表を出力します。
・表側に「年月」
・表頭に「商品」
・売上を集計
--「年月毎における商品ごとの売上」のクロス集計表を出力
SELECT
FORMAT(saleDate,'yyyyMM') AS '売上年月',
SUM(CASE productName WHEN 'りんご' THEN price ELSE 0 END) AS 'りんごの売上',
SUM(CASE productName WHEN 'みかん' THEN price ELSE 0 END) AS 'みかんの売上',
SUM(price) AS '売上合計'
FROM sales
GROUP BY
FORMAT(saleDate,'yyyyMM')
結果の確認
SELECT文で単純にテーブルのデータを出力させて、クロス集計表の結果に問題が無いことを確認します。
SELECT
*
FROM sales
データの分析等をする際に、クロス集計表を使用します!
クロス集計表により、
・売上の多い月は何月なのか?
・ある商品がよく売れる季節はいつなのか?
などを把握できます!