ylbtech-SQL Server:使用 PIVOT 行转列和 UNPIVOT 列转行
可以使用 PIVOT 和 UNPIVOT 关系运算符将表值表达式更改为另一个表。PIVOT 通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合。UNPIVOT 与 PIVOT 执行相反的操作,将表值表达式的列转换为列值。
【注】对升级到 SQL Server 2005 或更高版本的数据库使用 PIVOT 和 UNPIVOT 时,必须将数据库的兼容级别设置为 90 或更高。有关如何设置数据库兼容级别的信息,请参阅 sp_dbcmptlevel (Transact-SQL)。
A,PIVOT 语法返回顶部
1、

PIVOT 提供的语法比一系列复杂的 SELECT...CASE 语句中所指定的语法更简单和更具可读性。有关 PIVOT 语法的完整说明,请参阅 FROM (Transact-SQL)。
以下是带批注的 PIVOT 语法。

SELECT <非透视的列>,[第一个透视的列] AS <列名称>,[第二个透视的列] AS <列名称>,...[最后一个透视的列] AS <列名称>,
FROM(<生成数据的 SELECT 查询>)AS <源查询的别名>
PIVOT
(<聚合函数>(<要聚合的列>)
FOR
[<包含要成为列标题的值的列>]IN ( [第一个透视的列], [第二个透视的列],... [最后一个透视的列])
) AS <透视表的别名>
<可选的 ORDER BY 子句>;

2、
B,PIVOT 示例1返回顶部
0、
 示例脚本源
1、
P1、如果我想知道每位学生的每科成绩,而且每个学生的全部成绩排成一行,这样方便我查看、统计,导出数据
1-1、
--A1、传统 case 方法
select username as '姓名'
,max(case [subject] when '语文' then score else 0 end) as '语文'
,max(case [subject] when '数学' then score else 0 end) as '数学'
,max(case [subject] when '英语' then score else 0 end) as '英语'
,max(case [subject] when '生物' then score else 0 end) as '生物'
from StudentScores
group by username;

1-2、
-- A2:PIVOT 方法
select username as '姓名',[语文],[数学],[英语],[生物] from StudentScores a
PIVOT
(
max(a.score) for a.subject in([语文],[数学],[英语],[生物])
)b;

1-3、查询结果
1-4、
2、
C,UNPIVOT 示例1返回顶部
0、
 示例脚本源
1、
-- P1:查询项目每个供应商的供给数量?
-- A1:UNPIVOT 方法
select b.projectName,b.supplier,b.supllyNumber from (
select projectName,overseaSupply,nativeSupply,southSupply,northSupply from ProjectDetail) a
UNPIVOT
(
supllyNumber for supplier in(overseaSupply,nativeSupply,southSupply,northSupply)
)b;

2、
D,PIVOT 示例2返回顶部
1、建立一个销售情况表,其中,year字段表示年份,quarter字段表示季度,amount字段表示销售额。quarter字段分别用Q1, Q2, Q3, Q4表示一、二、三、四季度。
2、
 示例脚本源
3、
E,返回顶部
F,返回顶部
G,相关资源返回顶部
1、官方示例
https://technet.microsoft.com/zh-cn/library/ms177410(v=sql.105).aspx#简单 PIVOT 示例
1,
H,返回顶部
本文转自ylbtech博客园博客,原文链接:http://www.cnblogs.com/ylbtech/p/8028808.html,如需转载请自行联系原作者

SQL Server:使用 PIVOT 行转列和 UNPIVOT 列转行相关推荐

  1. SQL Server里PIVOT运算符的”红颜祸水“

    概述 SQL Server里PIVOT运算符背后的基本思想是在T-SQL查询期间,你可以旋转行为列.运算符本身是SQL Server 2005后引入的,主要用在基于建立在实体属性值模型(Entity ...

  2. 利用T-SQL动态定义重复SQL Server数据库表行

    介绍 (Introduction) Lever T-SQL to handle duplicate rows in SQL Server database tables article highlig ...

  3. SQL Server创建复合索引时,复合索引列顺序对查询的性能影响

    SQL Server创建复合索引时,复合索引列顺序对查询的性能影响 原文:SQL Server创建复合索引时,复合索引列顺序对查询的性能影响 说说复合索引 写索引的博客太多了,一直不想动手写,有一下两 ...

  4. SQL Server删除重复行的6个方法

    SQL Server删除重复行是我们最常见的操作之一,下面就为您介绍六种适合不同情况的SQL Server删除重复行的方法,供您参考. 1.如果有ID字段,就是具有唯一性的字段 delect   ta ...

  5. SQL Server 中 ROWLOCK 行级锁

    一.ROWLOCK的使用 1.ROWLOCK行级锁确保,在用户取得被更新的行,到该行进行更新,这段时间内不被其它用户所修改.因而行级锁即可保证数据的一致性,又能提高数据操作的并发性. 2.ROWLOC ...

  6. sql server之pivot函数

    PIVOT用于将列值旋转为列名(即行转列) 今天整理以前的笔记时,发现以前在PPD实习的时候遇到一个场景,感觉很实用所以想记录一下,说不定以后能用到,话不多说,直接上案例: --表table1 问题编 ...

  7. SQL Server 堆表行存储大小(Record Size)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 堆表行记录存储格式(Heap) 案例分析(Case) 参考文献(References) 二.背 ...

  8. SQL SERVER 表最小行的一个纠结问题

    昨天一个同事突然问我,说他在SQL 2000数据库创建如下表的时候,突然碰到了下面一条警告信息.SQL脚本和警告信息如下: IF OBJECT_ID(N'Log') IS  NULL BEGIN CR ...

  9. SQL SERVER将多行数据合并成一行(转载)

    昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行 比如表中有两列数据 : ep_classes  ep_name A ...

最新文章

  1. Transformer也能生成图像
  2. 一个仿微信朋友圈的图片查看框架 - PhotoViewer
  3. 「追根溯源」Ruby数组的uniq方法
  4. Mybatis源码: Builder Mapper Executor
  5. 爱思助手短信备份到安卓_爱思助手肿么将短信导入iphone
  6. mysql可以存储整数数值的是_MySQL知识树 数值类型 整数
  7. 这些将在新一年改变你的风控内容
  8. PostgreSQL如何拼接字符串
  9. 俄亥俄大学计算机科学专业,俄亥俄州立大学计算机科学专业研究生申请条件
  10. 【科普】波特率和比特速率的理解
  11. framemaker中遍历及判断其属性是否存在
  12. easypoi 语法_【英语语法】一般过去时(附视频讲解)
  13. 基于GAN的语音转换技术及语音合成TTS
  14. 微信 SHA1 签名_微信公众号自动回复功能开发
  15. 时间序列信号处理(四)——傅里叶变换和短时傅里叶变换python实现
  16. 若依ruoyi框架实现单点登录或者接入统一认证
  17. Kubernetes集群搭建以及基本使用【具详细】;
  18. java 事件链_供应链攻击事件——针对Github中Java项目的定向攻击
  19. Active Directory(活动目录) 域服务
  20. 应急资源大数据三维电子沙盘展示系统

热门文章

  1. 因虚而安全---vsftpd虚拟用户
  2. 统计学习方法|感知机原理剖析及实现
  3. java文件怎么建立关联_如何创建两个Java Web应用程序并相互关联jar依赖关系和其他文件?...
  4. 利用vue和jQuery实现中国主要城市搜索与选择
  5. linux下源码安装rabbitMq
  6. AtCoder Regular Contest 098
  7. 51nod 1402最大值
  8. 常用服务的默认端口号
  9. Unity开发NGUI代码实现ScrollView(放大视图)
  10. 【新手向】jQuery Mobile中动态加载或执行脚本的分析