Note
SQLで縦に並んでるデータを横に並べる。
縦持ちのテーブル
owner_id | key | value |
---|---|---|
1 | height | 160 |
1 | weight | 60 |
2 | height | 170 |
2 | weight | 70 |
横持ちのテーブル
owner_id | height | weight |
---|---|---|
1 | 160 | 60 |
2 | 170 | 70 |
以下のようにcase文を使うことで横持ちにする
select owner_id
max(case key when height then value end) as height
max(case key when weight then value end) as weight
from table
group by owner_id
max()
で囲むことでgroup by
時のaggregateを擬似的に対応できる。
group by
を行わない場合以下のようなテーブルが生成される。
owner_id | height | weight |
---|---|---|
1 | 160 | null |
1 | null | 60 |
2 | 170 | null |
2 | null | 70 |
このテーブルをgroup by
することで横持ちのテーブルのような形に整形が可能になる。