通过 case when 进行行转列

本贴最后更新于 2504 天前,其中的信息可能已经斗转星移

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

样本如下:

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 的部分合并,就可以得到预期结果

  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1090 引用 • 3467 回帖 • 298 关注
  • 行转列
    1 引用 • 3 回帖
  • SQL
    124 引用 • 296 回帖 • 3 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...