背景
Unpivot の反対に Pivot をしたくなったので
概要
Pivot が無いので、Group By して
詳細
変換前:元データ
変換後:取得したい結果
SQL
- GROUP BY でグルーピング
- 条件合致するデータだけを Pivot 追加列に取得
- MIN: 特に意味は無い。取得対象は一点あるかないか、なので、MIN 使ってるだけ
- COALESCE で存在しない場合の値を定義。例では全部 0
- 条件合致するデータだけを Pivot 追加列に取得
Pivot
SELECT
"ID",
COALESCE(MIN(t0."SubID"), 0)::int AS SubID,
COALESCE(MIN(CASE WHEN "isVertical" THEN "length" END), 0)::int AS Height,
COALESCE(MIN(CASE WHEN NOT "isVertical" THEN "length" END), 0)::int AS Width,
COALESCE(MAX(t0."SubID"), 0)::int AS SubID2
FROM sampleTable AS t0
GROUP BY "ID"
あとがき
Pivot が無いと気付かず少し悩んでしまった・・
keyword
Equivalent to pivot() in PostgreSQL