CASE式を使用して、クロス集計表を作成する

以下のような単純なテーブルを、

以下のようなクロス集計表の形で出力することができます!

クロス集計表とは

「表側」と「表頭」を持つ「集計結果」を示した表です。

CASE式とは

標準SQLに含まれているモノです。
よってSQL Serverを含む全てのRDBMSで使用可能です。

CASE式を使用することで、テーブルのデータをクロス集計表の形で出力することができます。

「テーブルのデータをクロス集計表の形で出力する」ということは、
テーブルの体裁をSQLで整えるということです。

本来、体裁を整えるのはアプリケーション(プレゼンテーション層)が実施するものであり、SQLで実施するものではありません。

SQLで体裁を整えることで、アプリケーションの負担を軽減することができます。

準備

以下の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')

上記は「単純CASE式」で記載しています。

単純CASE式・・・複雑な条件は記載できないが、シンプルに記載できる
検索CASE式・・・複雑な条件を記載できる分、複雑な記載になる場合がある

結果確認

SELECT文で単純にテーブルのデータを出力させて、クロス集計表の結果に問題が無いことを確認します。

SELECT 
	*
FROM sales

 

データの分析等をする際に、クロス集計表を使用します!

クロス集計表により、
 ・売上の多い月は何月なのか?
 ・ある商品がよく売れる季節はいつなのか?
などを把握することができます!

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