通过case when进行行转列

行转列这个问题感觉经常会出现,但我一直没有get到,这次借着群里的小伙伴再次提到,解锁这一成就 :joy:

样本如下:

b7809bae508c4adbbd47f5ec57d79841-1.png

目标结果如下:

1c2327bf208b40039f9aecf60a7211a9-2.png

代码如下:

select username,
sum(case when bookname='X' then price end) as 'X',
sum(case when bookname='Y' then price end) as 'Y',
sum(case when bookname='Z' then price end) as 'Z'
from test
group by username

说明

可以看到,关键在于case when和聚合
通过多个case when,来讲bookname列重复成多列,满足条件才显示,否则就是null:
a4cdd23eee94472981d51f16a29b647b-3.png
然后根据username进行聚合,将null的部分合并,就可以得到预期结果

validate