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 ,就可以实现从列转为行啦!

SQL实现数据行列转换的更多相关文章
- 每日学习心得:SQL查询表的行列转换/小计/统计(with rollup,with cube,pivot解析)
2013-8-20 1. SQL查询表的行列转换/小计/统计(with rollup,with cube,pivot解析) 在实际的项目开发中有很多项目都会有报表模块,今天就通过一个小的SQL ...
- SQL查询表的行列转换/小计/统计(with rollup,with cube,pivot解析)
SQL查询表的行列转换/小计/统计(with rollup,with cube,pivot解析) 2013-8-20 1. SQL查询表的行列转换/小计/统计(with rollup,with ...
- sql server动态行列转换
原文链接:https://www.cnblogs.com/gaizai/p/3753296.html sql server动态行列转换 一.本文所涉及的内容(Contents) 本文所涉及的内容(Co ...
- SQL Server中行列转换 Pivot UnPivot
SQL Server中行列转换 Pivot UnPivot PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PI ...
- SQL中PIVOT 行列转换
来源:http://www.studyofnet.com/news/295.html PIVOT通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列 ...
- SQL语句的行列转换
[一]行转列 1,查询原始的数据 /***这次练习的主题,行转列,列转行***/select * from Scores 2,得到姓名,通过group by select Student as '姓名 ...
- SQL Server中行列转换
典型实例 一.行转列 1.建立表格 ifobject_id('tb')isnotnulldroptabletb go createtabletb(姓名varchar(10),课程varchar(10) ...
- SQL技巧之行列转换
比如:id 姓名 状态 1 刘德华 12 刘德华 23 周华健 04 吴彦祖 1 在access中,用一条sql查询 ...
- SqlServer和Oracle中一些常用的sql语句3 行列转换
--217, SQL SERVER SELECT Cust_Name , MAX(CASE WHEN Order_Date ='2009-08-01' THEN AR END) "2009- ...
随机推荐
- 2018.10.18 poj2187Beauty Contest(旋转卡壳)
传送门 旋转卡壳板子题. 就是求凸包上最远点对. 直接上双指针维护旋转卡壳就行了. 注意要时刻更新最大值. 代码: #include<iostream> #include<cstdi ...
- 11) 生成可执行jar文件 maven-shade-plugin
搜索 site:maven.apache.org maven-assembly-plugin http://maven.apache.org/plugins/maven-assembly-plugin ...
- #include 和 #import 的区别, @class 的含义
#import 和 #include 会包含这个类的所有信息,包括实体变量和方法 而#include比起 #import的好处不会引起重复包含 @class是用来做类引用的 @class就是告诉编译 ...
- 阿里Sophix热修复
阿里巴巴对Android热修复技术已经进行了长达多年的探索. 最开始,是手淘基于Xposed进行了改进,产生了针对Android Dalvik虚拟机运行时的Java Method Hook技术,Dex ...
- codevs 1083
这道题是看了人家大牛的解题报告: 对了,要说明一下,(A+B)&1 ,表示,判断(A+B)是奇数否? 下面给出代码: #include<iostream> #include< ...
- jquery 问题
detach():这个方法不会把匹配的元素从jQuery对象中删除,因而可以在将来再使用这些匹配的元素.与remove()不同的是,所有绑定的事件.附加的数据等都会保留下来. jquery ajax不 ...
- mysql中设置默认字符编码为utf-8
使用过Linux的同志就知道,在Linux下安装mysql,尤其是使用yum安装的时候,我们是没法选择其默认的字符编码方式.这个就是一个比较头痛的问题,如果Linux数据库中使用到中文的时候,乱码问题 ...
- 如何处理App的Application的事件
http://blog.sina.com.cn/s/blog_44fa172f0102vwr2.html 直接上代码,还有条经验就是SetApplicationEventHandler可注册多个事件方 ...
- Android-ColorsUtil工具类
颜色工具类 public class ColorsUtil { private ColorsUtil() { throw new Error("Do not need instantiate ...
- Python学习-31.Python中集合的一些操作
add方法: s = {1,2,3} s.add(4) print(s)# {1, 2, 3, 4} 同list的append方法,若调用s.add(3),则不会有任何影响.这点与C#中的HashSe ...