mysqlの列の値を列名に変換する方法

MySQLでは動的SQLやPIVOT関数を使用して列値を行名に変更できます。以下に両方の方法の例を示します。

  1. 動的 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の値を列名に変換できます。

  1. 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 関数を使って、これらの列の値を列名に変換します。実際の状況に応じて、列名のリストを修正することができます。

bannerAds