行列変換
相変わらず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に指定できない。
なるほど。。。