MySQL 行データを列データに変換する方法

MySQLでは、PIVOT操作を使って行データを列に変換できます。一般的な方法は次のとおりです。

まず、変換するデータを含むテーブルを作成します。例えば、data_table というテーブルがあり、id、category、value の 3 つのフィールドがあるとします。

CREATE TABLE data_table (
  id INT,
  category VARCHAR(50),
  value INT
);

INSERT INTO data_table (id, category, value)
VALUES
  (1, 'A', 10),
  (1, 'B', 20),
  (1, 'C', 30),
  (2, 'A', 40),
  (2, 'B', 50),
  (2, 'C', 60);

次に、CASE文と集計関数を用いて行データを列に変換します。この例では、category フィールドの値を列名として使用します。value フィールドは SUM 関数で集計します。

SELECT 
  id,
  SUM(CASE WHEN category = 'A' THEN value END) AS A,
  SUM(CASE WHEN category = 'B' THEN value END) AS B,
  SUM(CASE WHEN category = 'C' THEN value END) AS C
FROM data_table
GROUP BY id;

上記クエリは、以下のような結果を生成します。

idABC1
10
20
302
40
50
60

上記のクエリでは、SUM関数を使用して各カテゴリーの値を合計し、CASE文を使用して対応する値を適切な列に配置しています。GROUP BY句では、IDでグループ化しています。

これにより、縦データを列データに正常に変換しました。

bannerAds