UNPIVOT (SQL)
PIVOTの逆で、列を行に変換する操作。月ごとに列があるワイドな表(jan、feb、mar …)を、(月, 値)ごとに1行のナローな表に変える。表計算ソフト風のデータを、クエリしやすい形に正規化するのに役立つ。
用途:データがワイド形式(測定値ごとに別の列)で届くが、集計・絞り込み・結合のために縦持ち(正規化)にしたい場合。SQL ServerとOracleにはUNPIVOT構文がある。PostgreSQLでの移植性の高い書き方はSELECT id, 'jan' AS month, jan AS value FROM t UNION ALL SELECT id, 'feb', feb FROM t ...で、より洗練された方法はLATERAL (VALUES (...))だ。配列とunnest()も使える。経験則として、分析にも保存にも、縦持ち(ナロー)形式のほうがほぼ常に横持ち(ワイド)形式より優れており、UNPIVOTはそこへ至るための道具である。逆方向に変換するPIVOTと対になる。