SQL实现数据行列转换
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQL实现数据⾏列转换
前⾔:
在⽇常的⼯作中,使⽤数据库查看数据是很经常的事,数据库的数据⾮常多,如果此时的数据设计是⼀⾏⾏的设计话,就会有多⾏同⼀个⽤户的数据,查看起来⽐较费劲,如果数据较多时,不⽅便查看,为了更加⽅便⼯作中查看数据,如果可以随时切换⾏列数据的显⽰就好啦。
上图详细看这种情况:同⼀个test学⽣,有多门学科的成绩,每科成绩为⼀⾏,如果学⽣⽐较多的时候,这样⼀⾏⼀个成绩,是不是觉得查看⽐较⿇烦呢?可不可以将所有学科的成绩都放到同⼀⾏呢?答案是肯定的!!
最终要实现的效果:
如下图的最终实现结果,⾃定义了各个科⽬来存放成绩,要实现这种效果,就需要加个条件去判断当前科⽬和获取到成绩,可以使⽤IF或case when 去判断
第⼀种:IF + 分组 +MAX/SUM
逐步分析为什么要这么写?
使⽤IF根据科⽬来进⾏筛选,如果当前为linux,直接取它的分数,其他为0,可以看到test学⽣的linux列中,只有第⼀⾏有分数,其他两⾏都为0,这样就可以先获得和预期结果⽐较相应的显⽰样式了
接着分析此时显⽰结果,以各个科⽬进⾏分类了,由于表中存在多个学⽣,需要⼀个以同⼀个学⽣为分组,使⽤group by进⾏分组
分组后,使⽤MAX在同⼀个组⾥取⼤值或 SUM求和
如图中的test的三⾏内容是属于同⼀个组别的,在这⼀组中求最⼤值
最终的SQL和效果:
第⼆种:使⽤CASE WHEN ...THEN ..ELSE... +MAX/SUM
步骤说明:这⾥的步骤的道理与IF的相同,先⽤case..when按照各个科⽬进⾏分列,然后按照同⼀个同学进⾏分组,再使⽤MAX或SUM ,就可以实现从列转为⾏啦!。