SQL 行转列 列转行 case when 写法

关于mysql 对 行转列,列转行的sql 编写,只用case when的写法

现有一组数据如下,该组数据网上随便找的,具体参考业务需求

表名为hl
利用SQL达到如下效果
在这里插入图片描述
实现语句
select name,max(case when subject=‘chinese’ then score end )chinese,max(case when subject=‘english’ then score end) english,max(case when subject=‘math’ then score end) math from hl group by name;

注意此处为什么要加max()函数,是因为我们case when后 没有匹配到的地方会以null值呈现,就像下面这种情况(没用group by是方便大家理解)
在这里插入图片描述
所以用max取每列的最大值(即有数据的那一行)

如果反过来的话该怎么样处理呢
在这里插入图片描述
转换成
在这里插入图片描述
实现语句
select name,‘chinese’ subject,chinese from lh union all select name,‘english’ subject,english from lh union all select name,‘math’ subject,math from lh;

这里用到了 union all

关于union all 和 union的区别,这里也简单提一下
union all是直接连接
union 是取并集,即重复的数据只出现一次

还有一个有趣的函数 PIVOT(UNPIVOT) 如果有兴趣的也可以去找找资料,希望该篇文章能够帮助大家解决问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值