SQL pivot 基本用法 行列转换 数据透视
SQL通过pivot进行行列转换 数据透视
可直接在sql server 运行
传统操作 和 pivot
create table XKCl
(name nchar(10) not null,
学科 nchar(10) not null,
成绩 int not null,
考试 nchar(10) not null
)
insert into dbo.XKCJ values ('张三','语文',79,'期中')
insert into dbo.XKCJ values ('李四','语文',85,'期中')
insert into dbo.XKCJ values ('王五','语文',75,'期中')
insert into dbo.XKCJ values ('张三','数学',93,'期中')
insert into dbo.XKCJ values ('李四','数学',98,'期中')
insert into dbo.XKCJ values ('王五','数学',87,'期中')
insert into dbo.XKCJ values ('张三','英语',92,'期中')
insert into dbo.XKCJ values ('李四','英语',90,'期中')
insert into dbo.XKCJ values ('王五','英语',88,'期中')
insert into dbo.XKCJ values ('张三','语文',80,'期末')
insert into dbo.XKCJ values ('李四','语文',81,'期末')
insert into dbo.XKCJ values ('王五','语文',79,'期末')
insert into dbo.XKCJ values ('张三','数学',90,'期末')
insert into dbo.XKCJ values ('李四','数学',95,'期末')
insert into dbo.XKCJ values ('王五','数学',80,'期末')
insert into dbo.XKCJ values ('张三','英语',92,'期末')
insert into dbo.XKCJ values ('李四','英语',90,'期末')
insert into dbo.XKCJ values ('王五','英语',85,'期末')
SELECT *
FROM XKCJ
name 学科 成绩 考试
---------- ---------- ----------- ----------------
张三 语文 79 期中
李四 语文 85 期中
王五 语文 75 期中
张三 数学 93 期中
李四 数学 98 期中
王五 数学 87 期中
张三 英语 92 期中
李四 英语 90 期中
王五 英语 88 期中
张三 语文 80 期末
李四 语文 81 期末
王五 语文 79 期末
张三 数学 90 期末
李四 数学 95 期末
王五 数学 80 期末
张三 英语 92 期末
李四 英语 90 期末
王五 英语 85 期末
计算两次考试每名学生各科的最高成绩
select name,
max(case 学科 when '数学' then 成绩 else 0 end )as 数学,
max(case 学科 when '英语' then 成绩 else 0 end )as 英语,
max(case 学科 when '语文' then 成绩 else 0 end )as 语文
From dbo.XKCJ
group by name
SELECT name,
max(数学) 数学,
max(英语) 英语,
max(语文) 语文
FROM dbo.XKCJ
pivot(max(成绩) FOR 学科 IN (语文,数学,英语)) tbnewtb
group by name
SELECT *
FROM (select name,学科,成绩
from dbo.XKCJ) new
pivot(max(成绩) FOR 学科 IN (数学,英语,语文)) newtb
name 数学 英语 语文
---------- ----------- ----------- -----------
李四 98 90 85
王五 87 88 79
张三 93 92 80
计算两次考试各科的最高成绩
select 考试 ,
max(case 学科 when '数学' then 成绩 else 0 end )as 数学,
max(case 学科 when '英语' then 成绩 else 0 end )as 英语,
max(case 学科 when '语文' then 成绩 else 0 end )as 语文
From dbo.XKCJ
group by 考试
SELECT *
FROM (select 考试,学科,成绩
from dbo.XKCJ) new
pivot(max(成绩) FOR 学科 IN (数学,英语,语文)) newtb
考试 数学 英语 语文
---------- ----------- ----------- -----------
期末 95 92 81
期中 98 92 85
行列转换
select name,考试,
sum(case 学科 when '数学' then 成绩 else 0 end )as 数学,
sum(case 学科 when '英语' then 成绩 else 0 end )as 英语,
sum(case 学科 when '语文' then 成绩 else 0 end )as 语文
From dbo.XKCJ
group by name,考试
SELECT *
FROM dbo.XKCJ
pivot(max(成绩) FOR 学科 IN (语文,数学,英语)) newtb
name 考试 语文 数学 英语
---------- ----------- ----------- ----------- -----------
李四 期末 81 95 90
王五 期末 79 80 85
张三 期末 80 90 92
李四 期中 85 98 90
王五 期中 75 87 88
张三 期中 79 93 92
SELECT name,语文,数学,英语
FROM dbo.XKCJ
pivot(max(成绩) FOR 学科 IN (语文,数学,英语)) newtb
name 语文 数学 英语
---------- ----------- ----------- -----------
李四 81 95 90
王五 79 80 85
张三 80 90 92
李四 85 98 90
王五 75 87 88
张三 79 93 92
计算每个同学每次考试的总分、平均分
select name,考试,
sum(case 学科 when '数学' then 成绩 else 0 end )as 数学,
sum(case 学科 when '英语' then 成绩 else 0 end )as 英语,
sum(case 学科 when '语文' then 成绩 else 0 end )as 语文,
SUM(成绩) as total,
AVG(成绩) as 平均
From dbo.XKCJ
group by name,考试
SELECT *,
数学+英语+语文 as total,
(数学+英语+语文)/3 as 平均
FROM dbo.XKCJ
pivot(max(成绩) FOR 学科 IN (数学,英语,语文)) newtb
name 考试 数学 英语 语文 total 平均
-------- ---------- ----------- ----------- ----------- ----------- -----------
李四 期末 95 90 81 266 88
王五 期末 80 85 79 244 81
张三 期末 90 92 80 262 87
李四 期中 98 90 85 273 91
王五 期中 87 88 75 250 83
张三 期中 93 92 79 264 88
SQL pivot 基本用法 行列转换 数据透视的更多相关文章
- SQL Fundamentals: 子查询 || 行列转换(PIVOT,UNPIVOT,DECODE),设置数据层次(LEVEL...CONNECT BY)
SQL Fundamentals || Oracle SQL语言 子查询(基础) 1.认识子查询 2.WHERE子句中使用子查询 3.在HAVING子句中使用子查询 4.在FROM子句中使用子查询 5 ...
- SQL 行列转换数据转换为字符串
行列转换,将列数据转换为字符串输出 ) SET @center_JZHW = ( SELECT DISTINCT STUFF( ( SELECT ',' + ce_code FROM ap_cente ...
- SQL SERVER 中的行列转换小结
1. 介绍说明 前段时间组内的小伙伴在升级维护项目中,经常涉及一些复杂的数据转换问题,让我去看下有些地方怎么处理,我发现好多都是涉及到行列转换的问题,处理起来经常会比较麻烦,借此也总结一下,方便以后的 ...
- [数据库] SQL查询语句表行列转换及一行数据转换成两列
原文来自:http://blog.csdn.net/Eastmount/article/details/50559008 本文主要讲述了SQL查询语句表之间的行列转换,同时也包括如何将一行数据转换成两 ...
- sql 语句写的行列转换
以前面试老遇到一个行列转换的问题,今天没事,顺便记录一下 假设有这样一张表,如下图,创建表就不说了,直接建或者SQL语句都行 sql语句如下 --第一种 select name as 姓名, max( ...
- 【数据库】SQL经典面试题 - 行列转换二 - 列转行
本帖子是行转列的一个逆向操作——列转行,看下面一个面试题 面试题2: 柠檬班第30期学生要毕业了,他们的Linux.MySQL.Java成绩数据表 tb_lemon_grade_column中, 表中 ...
- SQL中PIVOT和UNPIVOT行列转换
DECLARE @sql_col VARCHAR(8000); DECLARE @sql_str VARCHAR(8000); DECLARE @sql_ VARCHAR(MAX); SELECT @ ...
- 数据透视表sql:用SQL行列转换实现数据透视的一些思考
用SQL行列转换实现数据透视的一些思考 摘要:根据对报表开发过程中碰到的需要用SQL行列转换进行解决的一类查询统计问题的分析,逐步探索求解得到一种较通用的解决思路,并用函数进行实现.该解决思路及函数实 ...
- SQL行列转换6种方法
在进行报表开发时,很多时候会遇到行列转换操作,很对开发人员针对于SQL级别行列转换操作一直不甚理解,今天正好抽空对其进行了一些简单的总结.这里主要列举3种可以实现SQL行列转换的方法,包括通用SQL解 ...
随机推荐
- [iOS AFNetworking框架实现HTTP请求、多文件图片上传下载]
简单的JSON的HTTP传输就不说了,看一个简单的DEMO吧. 主要明白parameters是所填参数,类型是字典型.我把这部分代码封装起来了,以便多次调用.也许写在一起更清楚点. #pragma m ...
- 资料推荐--Google Java编码规范
之前已经推荐过Google的Java编码规范英文版了: http://google-styleguide.googlecode.com/svn/trunk/javaguide.html 虽然这篇文章的 ...
- JavaWeb学习总结-02 Tomcat 学习和使用
一 Tomcat服务器端口的配置 Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件. 如果想修改Tomcat服务器的启动端口,则可以在server.xml ...
- C++ Primer Plus读书笔记
第五章 循环和关系表达式 1. 2.类别别名: (1) #define FLOAT_POINTER float * FLOAT_POINTER pa, pb; 预处理器置换将该声明转换成 flo ...
- 关于vs生成app错误提示,提醒Execution failed for task ':transformClassesWithDexForDebug'.
昨天将vs和android SDK更新之后生成app之后发现app生成出错,报错如下: FAILURE: Build failed with an exception. * What went wro ...
- 深入JVM-常用Java虚拟机参数
一.跟踪调试参数 1.1 跟踪垃圾回收-读懂虚拟机日志 Java的一大特色就是支持自动的垃圾回收(GC),但是有时候,如果垃圾回收频繁出现,或者占用了太长的CPU时间,就不得不引起重视.此时,就需要一 ...
- Processing Images
https://developer.apple.com/library/content/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_ ...
- sql自带函数语句
--取数值表达式的绝对值select abs(-41) 41select abs(41) 41select abs(-41.12) 41.12select abs(41.12 ...
- nginx常用命令
ps -ef | grep nginx在进程列表里面找master进程,它的编号就是主进程号了. 步骤2:发送信号 从容停止Nginx: kill -QUIT 主进程号 快速停止Nginx: kill ...
- WinForm------如何将GridControl数据导出到Excel
转载: http://www.cnblogs.com/xiaofengfeng/archive/2011/11/22/2258906.html 代码: SaveFileDialog saveFileD ...