以下の図のように、縦持ちテーブルを横持ちテーブルに変換したいと思っています(テーブルやスクリプトは以下リンクから引用させていただいています)。
対応方法としてこのページにある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
プレビュー