MySQLで行を列に変換する方法には、何がありますか?
MySQLでは、行を列に変換するために以下の方法が利用できます。
- CASE文を使用すると、複数のCASE文を使ったり、複数行のデータを1行に変換することができます。各CASE文は1つの列に対応し、条件に応じてデータをその列に挿入します。例えば:
SELECT
id,
MAX(CASE WHEN type = 'A' THEN value END) AS value_a,
MAX(CASE WHEN type = 'B' THEN value END) AS value_b,
MAX(CASE WHEN type = 'C' THEN value END) AS value_c
FROM table_name
GROUP BY id;
- JOIN操作を使用すると、複数のテーブルを結合し、条件に基づいて対応するデータを対応する列に埋め込むことができます。例えば:
SELECT
t1.id,
t2.value AS value_a,
t3.value AS value_b,
t4.value AS value_c
FROM table_name t1
JOIN table_name t2 ON t1.id = t2.id AND t2.type = 'A'
JOIN table_name t3 ON t1.id = t3.id AND t3.type = 'B'
JOIN table_name t4 ON t1.id = t4.id AND t4.type = 'C';
- GROUP_CONCAT関数を使用すると、複数の行のデータを1つの文字列に結合し、複数の文字列を1行の中の複数の列に変換できます。例えば:
SELECT
id,
SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN type = 'A' THEN value END), ',', 1) AS value_a,
SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN type = 'B' THEN value END), ',', 1) AS value_b,
SUBSTRING_INDEX(GROUP_CONCAT(CASE WHEN type = 'C' THEN value END), ',', 1) AS value_c
FROM table_name
GROUP BY id;
これらの方法は、具体的な要件に応じて、データの行を列に変換する適切な方法を選択することができます。