SQL行转列与列转行(转)
原文: http://blog.csdn.net/jx_870915876/article/details/52403472
add by zhj: 本文是以MySQL为例说明的,但其实它适用于所有关系型数据库。
行转列的需求如下,可以发现,行转列时其实是先group by,然后将每个组中的行转为列,使用case-when + 聚合函数,
每个由行转为列的列,都要使用case-when或when-case语句。case-when是怎么作用的呢?组中的每行都经过case-when,
如果组中有N行,那通过case-when就产生N个值,再使用聚合函数,变为一个单一值,即新列的值。
行转列
例如:把图1转换成图2结果展示

图1

图2
|
1
2
3
4
5
6
7
|
CREATE TABLE `TEST_TB_GRADE` ( `ID` int(10) NOT NULL AUTO_INCREMENT, `USER_NAME` varchar(20) DEFAULT NULL, `COURSE` varchar(20) DEFAULT NULL, `SCORE` float DEFAULT '0', PRIMARY KEY (`ID`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; |
|
1
2
3
4
5
6
7
8
9
10
|
insert into TEST_TB_GRADE(USER_NAME, COURSE, SCORE) values("张三", "数学", 34),("张三", "语文", 58),("张三", "英语", 58),("李四", "数学", 45),("李四", "语文", 87),("李四", "英语", 45),("王五", "数学", 76),("王五", "语文", 34),("王五", "英语", 89); |
行转列SQL:
|
1
2
3
4
5
6
|
SELECT user_name , MAX(CASE course WHEN '数学' THEN score ELSE 0 END ) 数学, MAX(CASE course WHEN '语文' THEN score ELSE 0 END ) 语文, MAX(CASE course WHEN '英语' THEN score ELSE 0 END ) 英语FROM test_tb_gradeGROUP BY USER_NAME; |
列转行
例如:把图1转换成图3结果展示

图3
列转行SQL:
|
1
2
3
4
|
select user_name, '语文' COURSE , CN_SCORE as SCORE from test_tb_grade2union select user_name, '数学' COURSE, MATH_SCORE as SCORE from test_tb_grade2union select user_name, '英语' COURSE, EN_SCORE as SCORE from test_tb_grade2order by user_name,COURSE; |
SQL行转列与列转行(转)的更多相关文章
- 做图表统计你需要掌握SQL Server 行转列和列转行
说在前面 做一个数据统计和分析的项目,每天面对着各种数据,经过存储过程从源表计算汇总后需要写入中间结果表以提高数据使用效率,那么此时就需要用到行转列和列转行. 1.列转行 数据经过计算加工后会直接生成 ...
- SQL 行转列和列转行
SQL 行转列和列转行 行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过 ...
- sql中的行转列和列转行的问题
sql中的行转列和列转行的问题 这是一个常见的问题,也是一个考的问题 1.行转列的问题 简单实例 CREATE TABLE #T ( MON1 INT, MON2 INT, MON3 INT ) G ...
- sql 行专列 列转行 普通行列转换
转载:http://www.cnblogs.com/newwind521/archive/2010/11/25/1887203.html sql 行专列 列转行 普通行列转换 /* 标题:普通行列转换 ...
- (转载)重温SQL——行转列,列转行
原文地址:http://www.cnblogs.com/kerrycode/archive/2010/07/28/1786547.html 行转列,列转行是我们在开发过程中经常碰到的问题.行转列一般通 ...
- sql 行转列 PIVOT 列转行 UNPIVOT
原文:sql 行转列 PIVOT 列转行 UNPIVOT 一: 现有表一(t_table1),想转为表二(t_table2)的格式. 表一: 年 公司 收入 2013 公司1 12 2013 公司2 ...
- 【转载】SQL Server行转列,列转行
行转列,列转行是我们在开发过程中经常碰到的问题.行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 2005 新增的运算符PIVOT来实现.用传统的方法,比较好理解.层次清 ...
- 老生常谈之SQL Server (行转列,列转行)
Open the first article 在本文章中主要介绍以下内容: 1.静态行转列 2.静态列转行 3.动态行转列 4.动态列转行 1.静态行转列 --静态的行转列 --新建一个科目成绩表 - ...
- SQL行转列(PIVOT)与列转行(UNPIVOT)简明方法
原文地址:https://www.cnblogs.com/linJie1930906722/p/6036714.html 在做数据统计的时候,行转列,列转行是经常碰到的问题.case when方式太麻 ...
随机推荐
- 【原创】大叔经验分享(11)python引入模块报错ImportError: No module named pandas numpy
python应用通常需要一些库,比如numpy.pandas等,安装也很简单,直接通过pip # pip install numpyRequirement already satisfied: num ...
- OrCAD Capture CIS 16.6 为原理图中的Off-Page Connector添加页面编号
操作系统:Windows 10 x64 工具1:OrCAD Capture CIS 16.6-S062 (v16-6-112FF) 为原理图中的Off-Page Connector添加页面编号 一般来 ...
- java 查找类的所有子类
package _02; import java.io.File; import java.net.URL; public class MainTest_FindAllSubClass { publi ...
- iOS开发之#impor与#include的区别
#import比起#include的好处就是不会引起交叉编译 在 Objective-C中,#import 被当成 #include 指令的改良版本来使用.除此之外,#import 确定一个文件只能被 ...
- [原创]FPGA JTAG工具设计(一)
先来看不同JTAG方案,下载配置QSPI Flash所耗时间 基于FTDI方案,JTAG下载时间为494sec JTAG chain configuration ------------------- ...
- ReactiveCocoa - study
//KVO值监控,当alertTip改变时调用, filter对alertTip值进行过滤,此处当alertTip存在而长度不为0时,执行suscribeNext方法,弹出提示 [[RACObserv ...
- pc端网页,移动端网页(andorid、ios)离开页面做一个时间存储
如图所示:在一个页面中做了一个倒计时,然后用户想离开页面做其他事情,需求是离开页面之后把时间保存,下一次进来继续的时候时间还是上次离开的时间 第一次我用的事件是: // window.onbefor ...
- SparkCore | Rdd| 广播变量和累加器
Spark中三大数据结构:RDD: 广播变量: 分布式只读共享变量: 累加器:分布式只写共享变量: 线程和进程之间 1.RDD中的函数传递 自己定义一些RDD的操作,那么此时需要主要的是,初始化工作 ...
- Linux终端复用神器-Tmux使用梳理
Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权.使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“ ...
- python3.7 打包成exe程序(只需两行命令)
根据博客作者louniuous的python3.7 打包成exe的一种方法 pyinstaller一文改编简化 环境:pycharm2018.1+win7+python3.7 工具:pyinstall ...