行を列に変換する SQL の方法
SQLでは、行のピボットには次の方法があります。
- CASE ステートメントを使用する:
- CASE文でピボットする列ごとに対応するCASE文を記述し、ピボットする行の選択条件を変えることにより、複数の列のピボットを行う。その際、SUMやMAX、MINなどの集計関数を使用してピボット列を集計する。
- 示例:
SELECT
MAX(CASE WHEN condition_1 THEN value_1 END) AS column_1,
MAX(CASE WHEN condition_2 THEN value_2 END) AS column_2,
...
FROM table_name
- PIVOTステートメントを使用してください。
- PIVOTステートメントは、行変換を実行するための特別な構文です。転置する列と集計する列を指定する必要があり、どの集計関数を使用するかを選択できます。
- 示例:
SELECT *
FROM (
SELECT column_1, column_2, ...
FROM table_name
) AS source_table
PIVOT (
aggregate_function(column_to_aggregate)
FOR column_to_pivot
IN (list_of_pivot_values)
) AS pivot_table
- UNION ALL構文を使って下さい:
- 転置する各列からレコードを抽出し、UNION ALLで連結する。
- 例えば
SELECT 'column_1' AS column_name, column_1 AS column_value
FROM table_name
UNION ALL
SELECT 'column_2' AS column_name, column_2 AS column_value
FROM table_name
...
一般的には、CASE 式を使用した方法とPIVOT 式を使用した方法が最も一般的使用方法ですが、具体的なデータやニーズに応じて、異なる方法で異なる結果やパフォーマンスになる場合があります。