MySQL Unpivotのやり方:複数列を1列に変換する方法

MySQLでは、データの逆転操作を実現するための組み込みのUNPIVOT関数はありません。しかし、UNION ALLステートメントを使用して同様の機能を実現することができます。以下は例です:

表に以下のデータが含まれていると仮定するとします。

| id | name | score1 | score2 | score3 |
|----|------|--------|--------|--------|
| 1  | Alice| 80     | 85     | 90     |
| 2  | Bob  | 75     | 70     | 80     |
| 3  | Chris| 90     | 95     | 85     |

データを逆にするには、次のSQLステートメントを使用してください:

SELECT id, name, 'score1' AS score_type, score1 AS score
FROM table_name
UNION ALL
SELECT id, name, 'score2' AS score_type, score2 AS score
FROM table_name
UNION ALL
SELECT id, name, 'score3' AS score_type, score3 AS score
FROM table_name

上記のSQL文を実行すると、以下の結果が得られます。

| id | name | score_type | score |
|----|------|------------|-------|
| 1  | Alice| score1     | 80    |
| 1  | Alice| score2     | 85    |
| 1  | Alice| score3     | 90    |
| 2  | Bob  | score1     | 75    |
| 2  | Bob  | score2     | 70    |
| 2  | Bob  | score3     | 80    |
| 3  | Chris| score1     | 90    |
| 3  | Chris| score2     | 95    |
| 3  | Chris| score3     | 85    |

元のテーブルの列を行に変換する操作が実現されました。

bannerAds