Pivotの使い方: Pivotを使用すると、行の値を列として表示することができます。具体的な例を見てみましょう。
例えば、以下のようなテーブルがあるとします:
テーブル名: Sales
+-------+-------+-------+------+
| 月 | 商品 | 売上 | 利益 |
+-------+-------+-------+------+
| 1月 | A | 100 | 10 |
| 1月 | B | 200 | 20 |
| 2月 | A | 150 | 15 |
| 2月 | B | 250 | 25 |
+-------+-------+-------+------+
この表を「月」を基準にPivotして、「商品」ごとの売上と利益を表示したい場合、次のようなクエリを使用します:
SELECT *
FROM Sales
PIVOT (
SUM(売上) AS 売上,
SUM(利益) AS 利益
FOR 商品 IN ([A], [B])
) AS PivotTable
上記のクエリでは、FOR
句でPivotする列を指定し、SUM
関数を使用して集計を行っています。結果は以下のようになります:
+-------+------+-------+-------+-------+
| 月 | A_売上 | A_利益 | B_売上 | B_利益 |
+-------+------+-------+-------+-------+
| 1月 | 100 | 10 | 200 | 20 |
| 2月 | 150 | 15 | 250 | 25 |
+-------+------+-------+-------+-------+
Unpivotの使い方: Unpivotは、Pivotの逆の操作を行います。列を行に変換することで、データを簡素化したり、集計したりすることができます。以下に例を示します。
例えば、以下のようなPivotされたテーブルがあるとします:
テーブル名: PivotTable
+-------+------+-------+------+-------+
| 月 | A_売上 | A_利益 | B_売上 | B_利益 |
+-------+------+-------+------+-------+
| 1月 | 100 | 10 | 200 | 20 |
| 2月 | 150 | 15 | 250 | 25 |
+-------+------+-------+------+-------+
この表をUnpivotして、「商品」と「売上」「利益」の列を持つテーブルに変換したい場合、次のようなクエリを使用します:
SELECT 月, 商品, 値
FROM PivotTable
UNPIVOT (
値 FOR 商品 IN (A_売上, A_利益, B_売上, B_利益)
) AS UnpivotTable
上記のクエリでは、UNPIVOT
句でUnpivotする列とその列の値を指定しています。結果は以下のようになります:
+-------+--------+-----+
| 月 | 商品 | 値 |
+-------+--------+-----+
| 1月 | A_売上 | 100 |
| 1月 | A_利益 | 10 |
| 1月 | B_売上 | 200 |
| 1月 | B_利益 | 20 |
| 2月 | A_売上 | 150 |
| 2月 | A_利益 | 15 |
| 2月 | B_売上 | 250 |
| 2月 | B_利益 | 25 |
+-------+--------+-----+
以上が、SQLでのPivotとUnpivotの使い方の例です。これらの機能を使うことで、データの変換や集計を簡単に行うことができます。是非、実際のデータ操作でお試しください。