原文: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

  msdn参考

方法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用法的更多相关文章

  1. Ms sql pivot unpivot

    --建表 create table dbo.orders ( orderid int not null primary key nonclustered, orderdate datetime not ...

  2. SQL Server中行列转换 Pivot UnPivot

    SQL Server中行列转换 Pivot UnPivot PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PI ...

  3. sql server 行转列 Pivot UnPivot

    SQL Server中行列转换 Pivot UnPivot 本文转自:张志涛 原文地址: http://www.cnblogs.com/zhangzt/archive/2010/07/29/17878 ...

  4. [SQL]SUTFF内置函数的用法 (删除指定长度的字符并在指定的起始点插入另一组字符)

    STUFF 删除指定长度的字符并在指定的起始点插入另一组字符. 语法 STUFF ( character_expression , start , length , character_express ...

  5. SQL语句中 INNER JOIN的用法!

    一.SQL语句中  INNER JOIN的用法? 1.INNER JOIN的作用? 可以在两个或者更多的表中获取结果,得出一张新表. [隐式内连接] 表一 car  购物车 表二 user 用户 发现 ...

  6. SQL中的LIKE语句的用法

    SQL中的LIKE语句的用法 内容 在SQL结构化查询语言中,LIKE语句有着至关重要的作用.LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串), ...

  7. SQL Server中bcp命令的用法以及数据批量导入导出

    原文:SQL Server中bcp命令的用法以及数据批量导入导出 1.bcp命令参数解析 bcp命令有许多参数,下面给出bcp命令参数的简要解析 用法: bcp {dbtable | query} { ...

  8. sql pivot(行转列) 和unpivot(列转行)的用法

    1.PIVOT用法(行转列) select * from Table_Score as a pivot (sum(score) for a.name in ([语文],[数学],[外语],[文综],[ ...

  9. SQL Fundamentals: 子查询 || 行列转换(PIVOT,UNPIVOT,DECODE),设置数据层次(LEVEL...CONNECT BY)

    SQL Fundamentals || Oracle SQL语言 子查询(基础) 1.认识子查询 2.WHERE子句中使用子查询 3.在HAVING子句中使用子查询 4.在FROM子句中使用子查询 5 ...

随机推荐

  1. Eclipse 未开始 【Ubuntu】

    /usr/lib/eclipse/configuration/1408532831122.log : !SESSION 2014-08-20 19:07:11.055 ---------------- ...

  2. 苹果iOS手机系统诊断功能是后门吗?

    7月20日,美国知名苹果iOS手机系统侦破专家扎德尔斯基在2014年世界黑客大会(HOPE/X)用幻灯片讲演揭露了苹果手机存在系统级"后门". 为此,7月23日.苹果公司马上做出回 ...

  3. hdu1712(分组背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1712 分析: 典型的分组背包问题,如果不会的可以看一下背包九讲. 看下背包九讲中的描述: for 所有 ...

  4. hdu2870(dp求最大子矩阵)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2870 分析:分别转换成'a','b','c'三种来求,其实就跟hdu1505一样了... #inclu ...

  5. NOJ1184 失落的邮票 哈希表

    意甲冠军 我们共收集N邮票.现在失去了2张,剩下N-2张-..原集邮收集了所有对.因此,找到什么两枚邮票是一个.它们输出. (确定缺少邮票是不一样的) 思路 由于编号比較大,能够用hash表压缩成数组 ...

  6. surfaceflinger中各个layer的排序

    surfaceflinger的主要工作就是负责把上层传递下来的各个不同的layer进行composition. 这里,我们来讨论一下各个layer在surfaceflinger中的上下排序关系和相关的 ...

  7. Lua 与C 交换 第一篇

    编译 windows上编译lua源代码 cl /MD /O2 /W3 /c /DLUA_BUILD_AS_DLL *.c del *.o ren lua.obj lua.o ren luac.obj ...

  8. 循环多少次? 【杭电--HDOJ-1799】 附题+具体解释

    循环多少次? Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  9. 关于使用X-UA-Compatible来设置IE浏览器兼容模式

    原文地址:http://www.cnblogs.com/nidilzhang/archive/2010/01/09/1642887.html 前言 为了帮助确保你的网页在所有未来的IE版本都有一致的外 ...

  10. Asp.Net2.0下C#环境 Login控件实现用户登录

    原文:Asp.Net2.0下C#环境 Login控件实现用户登录 一.前台显示效果 二.前台代码             <asp:Login ID="Login1" run ...