原文: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. 在Activity中为什么要用managedQuery()

    刚開始接触android的时候,每次用数据库都会犹豫使用哪种方式,一种是getContentResolver().query(...),还有一种是managedQuery(...),后来习惯了使用前一 ...

  2. [置顶] android系统功能调用大全

    1.从google搜索内容  Intent intent = new Intent();  intent.setAction(Intent.ACTION_WEB_SEARCH);  intent.pu ...

  3. SVNKIT操作SVN版本库的完整例子

    Model: package com.wjy.model; public class RepositoryInfo { public static String storeUrl="http ...

  4. poj3206(bfs+最小生成树)

    传送门:Borg Maze 题意:有一个迷宫,里面有一些外星人,外星人用字母A表示,#表示墙,不能走,空格可以走,从S点出发,在起点S和A处可以分叉走,问找到所有的外星人的最短路径是多少? 分析:分别 ...

  5. 【Ruby】Ruby的model学习——Active Record Associations

    在阅读的过程中有不论什么问题,欢迎一起交流 邮箱:1494713801@qq.com    QQ:1494713801 一.怎样定义关联 两个model之间经常会存在关联关系,为了解决这些关联引起的复 ...

  6. 组队赛第二场:字符串哈希+DP

    长春现场赛 HDU 4821  思路:这题周赛的时候没做出来,有点可惜了.要是当时记起来unsigned long long自己主动取模,然后提醒一下大帝的话,后续大帝就能过了. 唉,导致让他取了好多 ...

  7. pig中使用的一些实例语法

    在pig中, dump和store会分别完毕两个MR, 不会一起进行 1:载入名用正則表達式: LOAD '/user/wizad/data/wizad/raw/2014-0{6,7-0,7-1,7- ...

  8. cocos2dx-lua牧场小游戏(一)

    环境: cocos2dx-3.0rc2,   xcode5.0 一.lua项目建立參考 http://blog.csdn.net/daydayup_chf/article/details/249641 ...

  9. 屌丝程序猿赚钱之道之taobao 2

    续上篇,之前写的案例,都是比較0基础的. 案例4:  代写情书.软文.论文等等. 这是我一个同学的真实故事.     我隔壁寝室的小王平时没事就爱谢谢博客.逛逛论坛.大二的时候接触了威客网,開始在网上 ...

  10. as 的妙用

    个人理解:as跟is is 相当于判断里的“==” 是与否 if(e.OriginalSource is Button) as 一般用来转换另一种object e.OriginalSource as ...