行列変換

相変わらずSQL再入門。

今度は列と行入れ替えるので悩みました。

[m_c]

member_id color
1
1
2
2
3

これを

メンバーID
1
2
3

こんな感じにしたい。
そんな時は以下SQL

select member_id as 'メンバーID'
       , CASE WHEN SUM(CASE WHEN color = '赤' THEN 1 ELSE NULL END) = 1 THEN '○' ELSE '' END AS "赤"
       , CASE WHEN SUM(CASE WHEN color = '青' THEN 1 ELSE NULL END) = 1 THEN '○' ELSE '' END AS "青"
       , CASE WHEN SUM(CASE WHEN color = '白' THEN 1 ELSE NULL END) = 1 THEN '○' ELSE '' END AS "白"
from m_c
group by member_id

CASEが集計関数の中に使えるってのを利用して、一回集計関数の中で1/nullの判定させてから、それを再度caseで判定してあげてる。
そうじゃないとgroup byやってるのでselectに指定できない。
なるほど。。。