SQLを使ってデータを扱うとき、表の形を「横持ち」や「縦持ち」に変換したい場面は多々あります。
例えば、月ごとの売上を列ごとに並べたい、あるいはアンケート結果を1列にまとめたいなど。
こうした「表の回転」に便利なのが PIVOT と UNPIVOT です。
本記事では、それぞれの使い方と、主要なDBMSごとの違いを整理します。
PIVOTとは?
PIVOTは 縦持ちデータを横持ちに変換する 機能です。
例:月ごとの売上を集計して列化する。
サンプルデータ
	商品 月 売上 
 
	A 1月 100 
 
	A 2月 150 
 
	B 1月 200 
 
	B 2月 180 
 
PIVOTのイメージ
UNPIVOTとは?
UNPIVOTは 横持ちデータを縦持ちに変換する 機能です。
例:上記の「商品×月売上表」を再び「商品・月・売上」の縦持ちに戻す。
各DBMSでの書き方比較
1. SQL Server
SQL Serverはネイティブで PIVOT / UNPIVOT をサポート。
2. Oracle
Oracleは PIVOT / UNPIVOT が標準で利用可能。
3. PostgreSQL
PostgreSQLはPIVOT句を持たないため、crosstab関数(tablefunc拡張) を使う。
4. MySQL
MySQLには PIVOT 句はなく、CASE式 + GROUP BY を使う。
DBMS比較表
	DBMS PIVOT対応 UNPIVOT対応 代替手段 
 
	SQL Server ネイティブ ネイティブ そのまま使用可 
 
	Oracle ネイティブ ネイティブ そのまま使用可 
 
	PostgreSQL なし なし crosstab関数 / UNION ALL 
 
	MySQL なし なし CASE式 + GROUP BY / UNION ALL 
 
まとめ
- 
SQL Server / Oracle → PIVOT/UNPIVOTがシンプルに使える。
 - 
PostgreSQL / MySQL → 標準ではなく、関数やCASE式で工夫が必要。
 
「集計を横に展開したい」あるいは「フラットに戻したい」とき、
DBMSに応じた方法を覚えておくと、データ整形がぐっと楽になります。
