以下の図のように、縦持ちテーブルを横持ちテーブルに変換したいと思っています(テーブルやスクリプトは以下リンクから引用させていただいています)。
対応方法としてこのページにあるCASE WHENを使って変換する方法はイメージがつくのですが、自分の場合、このキーが100個くらいあります(c1〜c100)。力技で100行のクエリーを書けなくはないのですが、キーが増える度にクエリも書き換えなければならず、不便だと感じています。
Pythonで対応する方法もありますが、これをmySQLで実装する方法はありますでしょうか?
そもそもテーブルの持ち方を変えた方がいいんじゃない?といった指摘でも助かります。
縦持ちテーブル
| uid | key | value |
|---|---|---|
| 101 | c1 | 11 |
| 101 | c2 | 12 |
| 101 | c3 | 13 |
| 102 | c1 | 21 |
| 102 | c2 | 22 |
| 102 | c3 | 23 |
横持ちテーブル
| uid | c1 | c2 | c3 |
|---|---|---|---|
| 101 | 11 | 12 | 13 |
| 102 | 21 | 22 | 23 |
SQL
1SELECT uid, 2 max(CASE WHEN key = 'c1' THEN value END) AS c1, 3 max(CASE WHEN key = 'c2' THEN value END) AS c2, 4 max(CASE WHEN key = 'c3' THEN value END) AS c3 5FROM vtable 6GROUP BY uid 7;
回答2件
あなたの回答
tips
プレビュー