スポンサーリンク

【SQL】PIVOT・UNPIVOT関数について分かりやすく解説!

記事内に広告が含まれています。

SQLのPIVOTとUNPIVOTは、データの表示方法を変換するための関数です。

PIVOTを使用すると、行データを列に変換し、UNPIVOTを使用すると列データを行に変換できます。

エクセルのピボットテーブルのような操作ができるイメージです。

PIVOTとUNPIVOTの基本概念、使用例、およびサンプルデータを用いてこれらの機能を詳しく説明します。

スポンサーリンク

PIVOT

PIVOTは、テーブル内のデータを行から列に変換するSQL操作です。

特定の列値を新しい列として表示し、それに対応する集計値を示すのに役立ちます。

サンプルデータ

まず、以下のような売上データを持つテーブルSalesを考えます。

EmployeeMonthSales
AliceJanuary100
AliceFebruary120
BobJanuary90
BobFebruary110
CharlieJanuary80
CharlieFebruary100

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;
結果
EmployeeJan_SalesFeb_Sales
Alice100120
Bob90110
Charlie80100
スポンサーリンク

UNPIVOT

UNPIVOTは、列データを行に変換するSQL操作です。

複数の列に分かれた値を単一の列にまとめるのに役立ちます。

サンプルデータ

先ほどのPIVOT結果を再利用します。

EmployeeJan_SalesFeb_Sales
Alice100120
Bob90110
Charlie80100

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;
結果
EmployeeMonthSales
AliceJan_Sales100
AliceFeb_Sales120
BobJan_Sales90
BobFeb_Sales110
CharlieJan_Sales80
CharlieFeb_Sales100

この結果からわかるように、UNPIVOTを使用するとデータが元の行形式に戻ります。

ただし、上記の例ですとMonth列の値を加工した方が扱いやすいでしょう。

おわりに

PIVOTとUNPIVOTを使用することで、データの表示形式を自由に変換することができます。

PIVOTは行を列に変換し、データを視覚的に整理するのに役立ちます。

UNPIVOTは列を行に戻し、データ分析や処理を容易にします。

これらの機能を適切に使用することで、データベース操作を効率化し、柔軟なデータ表示が可能になります。

使用できるデータベース製品については、各社のドキュメントをご確認ください。

スポンサーリンク
SQL
著者SNS
タイトルとURLをコピーしました