mysqlの列の値を列名に変換する方法
MySQLでは動的SQLやPIVOT関数を使用して列値を行名に変更できます。以下に両方の方法の例を示します。
- 動的 SQL を使用して
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(column_name = ''',
column_name,
''', column_value, NULL)) AS ',
column_name
)
) INTO @sql
FROM your_table;
SET @sql = CONCAT('SELECT id, ', @sql, ' FROM your_table GROUP BY id');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
上記の例では、id、column_name、column_value列を含むyour_tableテーブルを持っているとします。動的に生成されたSQL文を用意して実行することで、column_nameの値を列名に変換できます。
- PIVOT 関数を使用して
SELECT *
FROM
(
SELECT id, column_name, column_value
FROM your_table
) src
PIVOT
(
MAX(column_value)
FOR column_name IN ([column1], [column2], [column3])
) piv;
上記の例では、column_name で発生する可能性のある値をあらかじめ把握しておく必要があり、手動でそれら値をリストアップします。そして、PIVOT 関数を使って、これらの列の値を列名に変換します。実際の状況に応じて、列名のリストを修正することができます。