sql pivot、unpivot和partition by用法
原文:sql pivot、unpivot和partition by用法
演示脚本
IF not exists(SELECT 1 from sys.sysobjects where name = 'Student' AND type = 'U')
BEGIN
CREATE table Student(
ID int identity primary key,
ClassID int default 0 , --班级ID
CourseName nvarchar(20) , --课程
Name nvarchar(20) , --姓名
Score tinyint default 0 --成绩
)
END
GO IF not exists(SELECT 1 from Student)
begin
INSERT INTO Student(ClassID,CourseName,Name,Score)
SELECT 1,'数学','小红',80
UNION ALL
SELECT 1,'语文','小红',90
UNION ALL
SELECT 1,'英语','小红',88
UNION ALL
SELECT 1,'数学','小明',91
UNION ALL
SELECT 1,'语文','小明',78
UNION ALL
SELECT 1,'英语','小明',82
UNION ALL
SELECT 2,'数学','小强',67
UNION ALL
SELECT 2,'语文','小强',76
UNION ALL
SELECT 2,'英语','小强',58
UNION ALL
SELECT 2,'数学','小丽',87
UNION ALL
SELECT 2,'语文','小丽',94
UNION ALL
SELECT 2,'英语','小丽',98
end
GO
一 行列互转pivot和unpivot
方法1:
SELECT Name,
sum(CASE CourseName WHEN '数学' THEN Score ELSE 0 END) as '数学',
sum(CASE CourseName WHEN '语文' THEN Score ELSE 0 END) as '语文',
sum(CASE CourseName WHEN '英语' THEN Score ELSE 0 END) as '英语'
from Student
group BY Name
方法2:
SELECT t.Name,
sum(t.数学) as 数学,
sum(t.语文) as 语文,
sum(t.英语) as 英语
from (
SELECT Name,数学,语文,英语
from Student
PIVOT(
SUM(Score) FOR CourseName IN(数学,语文,英语)
) tb
) t
GROUP BY t.Name
查询结果:
Name 数学 语文 英语
-------------------- ----------- ----------- -----------
小红 80 90 88
小丽 87 94 98
小明 91 78 82
小强 67 76 58
二 partition by
如按每门课分数从高到低排
SELECT CourseName,Name,Score,
row_number() over(partition by CourseName order by Score desc) as Num
from Student
查询结果:
CourseName Name Score Num
-------------------- -------------------- ----- --------------------
数学 小明 91 1
数学 小丽 87 2
数学 小红 80 3
数学 小强 67 4
英语 小丽 98 1
英语 小红 88 2
英语 小明 82 3
英语 小强 58 4
语文 小丽 94 1
语文 小红 90 2
语文 小明 78 3
语文 小强 76 4
sql pivot、unpivot和partition by用法的更多相关文章
- Ms sql pivot unpivot
--建表 create table dbo.orders ( orderid int not null primary key nonclustered, orderdate datetime not ...
- SQL Server中行列转换 Pivot UnPivot
SQL Server中行列转换 Pivot UnPivot PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PI ...
- sql server 行转列 Pivot UnPivot
SQL Server中行列转换 Pivot UnPivot 本文转自:张志涛 原文地址: http://www.cnblogs.com/zhangzt/archive/2010/07/29/17878 ...
- [SQL]SUTFF内置函数的用法 (删除指定长度的字符并在指定的起始点插入另一组字符)
STUFF 删除指定长度的字符并在指定的起始点插入另一组字符. 语法 STUFF ( character_expression , start , length , character_express ...
- SQL语句中 INNER JOIN的用法!
一.SQL语句中 INNER JOIN的用法? 1.INNER JOIN的作用? 可以在两个或者更多的表中获取结果,得出一张新表. [隐式内连接] 表一 car 购物车 表二 user 用户 发现 ...
- SQL中的LIKE语句的用法
SQL中的LIKE语句的用法 内容 在SQL结构化查询语言中,LIKE语句有着至关重要的作用.LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串), ...
- SQL Server中bcp命令的用法以及数据批量导入导出
原文:SQL Server中bcp命令的用法以及数据批量导入导出 1.bcp命令参数解析 bcp命令有许多参数,下面给出bcp命令参数的简要解析 用法: bcp {dbtable | query} { ...
- sql pivot(行转列) 和unpivot(列转行)的用法
1.PIVOT用法(行转列) select * from Table_Score as a pivot (sum(score) for a.name in ([语文],[数学],[外语],[文综],[ ...
- SQL Fundamentals: 子查询 || 行列转换(PIVOT,UNPIVOT,DECODE),设置数据层次(LEVEL...CONNECT BY)
SQL Fundamentals || Oracle SQL语言 子查询(基础) 1.认识子查询 2.WHERE子句中使用子查询 3.在HAVING子句中使用子查询 4.在FROM子句中使用子查询 5 ...
随机推荐
- Python多线程2:sched
sched模块提供了一个类的事件安排. scheduler类定义 class sched.scheduler(timefunc=time.monotonic, delayfunc=time.sleep ...
- ipsec vpn私网数据大量掉包问题
周四出现了一个很奇葩的问题,所有的站点的VPN通信都是正常的,唯独郑州节点和中心节点的私网数据长ping掉包量达到20%左右,在中心节点ping郑州节点公网IP没有发现掉包问题,故障排除如下: 1.测 ...
- Linux SSH端口转发
SSH端口转发分为两种,一种是本地端口转发,又称为本地SSH隧道.一直是远程端口转发.SSH端口转发,还必须指定数据传送的目标主机,从而形成点对点的端口转发. 本地端口转发 假定有三台主机A. ...
- C#的百度地图开发(四)前端显示与定位
原文:C#的百度地图开发(四)前端显示与定位 有了这些定位信息,那要如何在前端的页面上显示出来呢?这需要用到百度地图的JavaScript的API.下面是示例代码. 前端代码 <%@ Page ...
- EF 打造冲不掉的标签
应用场景: 在用EF的Datebase Fitst模式开发时,实体都是有T4文件根据数据库来生成,并且是每次保存都会重新生成,如果我们在有T4生成的实体类上加上验证标签,那么以保存就会丢失, 解决方案 ...
- 恢复gvim的ctl+v可视模式设置
set nocompatiblesource $VIMRUNTIME/vimrc_example.vim"source $VIMRUNTIME/mswin.vim (注释此行)behave ...
- hdu1394(线段树求逆序对)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 线段树功能:update:单点增减 query:区间求和 分析:如果是0到n-1的排列,那么如果 ...
- Coreseek:indexer crashed神秘
浩哥前两天让我再Coreseek该指数再次这样做,由于需求方面变化不大,公司名称应出现指数.在添加的配置文件的面孔sql_field_string:串场.. 此属性特别有用,因为它不仅作为过滤器的特性 ...
- Sesson禁止使用Cookie
于WebRoot文件夹MEAT-INF新建文件夹context.xml 增加<context path="XXX" cookies='false"> 更改To ...
- 基于HttpClient 4.3的可訪问自签名HTTPS网站的新版工具类
本文出处:http://blog.csdn.net/chaijunkun/article/details/40145685,转载请注明.因为本人不定期会整理相关博文,会对相应内容作出完好.因此强烈建议 ...