SQLのPIVOTとUNPIVOTは、データの表示方法を変換するための関数です。
PIVOTを使用すると、行データを列に変換し、UNPIVOTを使用すると列データを行に変換できます。
エクセルのピボットテーブルのような操作ができるイメージです。
PIVOTとUNPIVOTの基本概念、使用例、およびサンプルデータを用いてこれらの機能を詳しく説明します。
PIVOT
PIVOTは、テーブル内のデータを行から列に変換するSQL操作です。
特定の列値を新しい列として表示し、それに対応する集計値を示すのに役立ちます。
サンプルデータ
まず、以下のような売上データを持つテーブルSales
を考えます。
Employee | Month | Sales |
---|---|---|
Alice | January | 100 |
Alice | February | 120 |
Bob | January | 90 |
Bob | February | 110 |
Charlie | January | 80 |
Charlie | February | 100 |
PIVOTの使用例
各従業員の月別売上を表示するために、PIVOTを使用します:
SELECT
Employee,
[January] AS Jan_Sales,
[February] AS Feb_Sales
FROM
(SELECT Employee, Month, Sales FROM Sales) AS SourceTable
PIVOT
(
SUM(Sales)
FOR Month IN ([January], [February])
) AS PivotTable;
結果
Employee | Jan_Sales | Feb_Sales |
---|---|---|
Alice | 100 | 120 |
Bob | 90 | 110 |
Charlie | 80 | 100 |
UNPIVOT
UNPIVOTは、列データを行に変換するSQL操作です。
複数の列に分かれた値を単一の列にまとめるのに役立ちます。
サンプルデータ
先ほどのPIVOT結果を再利用します。
Employee | Jan_Sales | Feb_Sales |
---|---|---|
Alice | 100 | 120 |
Bob | 90 | 110 |
Charlie | 80 | 100 |
UNPIVOTの使用例
月別売上を再び行データに戻すために、UNPIVOTを使用します。
SELECT
Employee,
Month,
Sales
FROM
(SELECT Employee, Jan_Sales, Feb_Sales FROM PivotTable) AS SourceTable
UNPIVOT
(
Sales FOR Month IN (Jan_Sales, Feb_Sales)
) AS UnpivotTable;
結果
Employee | Month | Sales |
---|---|---|
Alice | Jan_Sales | 100 |
Alice | Feb_Sales | 120 |
Bob | Jan_Sales | 90 |
Bob | Feb_Sales | 110 |
Charlie | Jan_Sales | 80 |
Charlie | Feb_Sales | 100 |
この結果からわかるように、UNPIVOTを使用するとデータが元の行形式に戻ります。
ただし、上記の例ですとMonth列の値を加工した方が扱いやすいでしょう。
おわりに
PIVOTとUNPIVOTを使用することで、データの表示形式を自由に変換することができます。
PIVOTは行を列に変換し、データを視覚的に整理するのに役立ちます。
UNPIVOTは列を行に戻し、データ分析や処理を容易にします。
これらの機能を適切に使用することで、データベース操作を効率化し、柔軟なデータ表示が可能になります。
使用できるデータベース製品については、各社のドキュメントをご確認ください。