作成日:2021-09-25,
更新日:2021-09-25
やりたいこと
▼こんなテーブルがあって・・・
| key | value |
|---|---|
| f_name | シマウマ |
| p_name | 太郎 |
| age | 7 |
| sex | 男 |
▼こんなレコードにしたい
| f_name | p_name | age | sex |
|---|---|---|---|
| シマウマ | 太郎 | 7 | 男 |
SQL
▼CASE文をMAXで囲んであげる
SELECT MAX(CASE WHEN `key`='f_name' THEN `value` ELSE '-empty-' END) AS f_name, MAX(CASE WHEN `key`='p_name' THEN `value` ELSE '-empty-' END) AS p_name, MAX(CASE WHEN `key`='age' THEN `value` ELSE '-empty-' END) AS age, MAX(CASE WHEN `key`='sex' THEN `value` ELSE '-empty-' END) AS sex FROM `〇〇〇`;
グループ化
▼ユーザーごとにキーバリューがある
| user_id | key | value |
|---|---|---|
| 1 | f_name | シマウマ |
| 1 | p_name | 太郎 |
| 2 | f_name | シマウマ |
| 2 | p_name | 花子 |
| 1 | age | 7 |
SELECT MAX(CASE WHEN `key`='f_name' THEN `value` ELSE '-empty-' END) AS f_name, MAX(CASE WHEN `key`='p_name' THEN `value` ELSE '-empty-' END) AS p_name, MAX(CASE WHEN `key`='age' THEN `value` ELSE '-empty-' END) AS age, MAX(CASE WHEN `key`='sex' THEN `value` ELSE '-empty-' END) AS sex FROM `〇〇〇` GROUP BY `user_id`;