SQL SERVER技术内幕之7 透视与逆透视
1.透视转换
透视数据(pivoting)是一种把数据从行的状态旋转为列的状态的处理,在这个过程中可能须要对值进行聚合。


每个透视转换将涉及三个逻辑处理阶段,每个阶段都有相关的元素:分组阶段处理相关的分组或行元素,扩展(spreading)阶段处理相关的扩展或列元素,聚合阶段处理相关的聚合元素和聚合函数。例子中的分组元素是empid,扩展元素为custid,聚合函数为SUM(),聚合元素为qty。
(1)使用标准SQL进行透视转换
SELECT empid,
SUM(CASE WHEN custid = ‘A’ THEN qty END) AS A,
SUM(CASE WHEN custid = ‘B’ THEN qty END) AS B,
SUM(CASE WHEN custid = ‘C’ THEN qty END) AS C,
SUM(CASE WHEN custid = ‘D’ THEN qty END) AS D
FROM dbo.Orders GROUP BY empid
(2)使用T-SQL PIVOT运算符进行透视转换
SELECT empid,A,B,C,D
FROM(SELECT empid,custid,qty
FROM dbo.Orders ) AS D
PIVOT(SUM(qty) FOR custid IN(A,B,C,D)) AS P
PIVOT 运算符隐式地把源表(或表表达式)中既没有指定为扩展元素,也没有指定为聚合元素的那些元素作为分组元素,所以在使用PIVOT运算符时,须要保证PIVOT运算符的源表除了分组、扩展和聚合元素以外,不能再包含其他属性。
2.逆透视转换
逆透视转换是一种把数据从列的状态旋转为行的状态的技术。
现在要求逆透视转换数据,为每个雇员和客户组合返回一行记录,其中包含这一组合的订货量,期望的输出结果应该如下所示:
(1)使用标准SQL进行逆透视转换
标准SQL解决方案非常明确地要实现3个逻辑处理阶段:生成副本、提取元素和删除不相关的交叉。
...解决方案的第一步是根据来源表的每一行生成多个副本,在这个例子,需要为A、B、C、D 4个列分别生成一个副本
SELECT *
FROM dbo.EmpCustOrders
CROSS JOIN(VALUES('A'),('B'),('C'),('D')) AS Custs(custid);
实现解决方案的第一步操作后,返回以下输出结果:
...第二步是生成一个数据列,由它返回与当前副本所代表的客户相对应的列值。具体到本例而言,如果当前custid的值为A,则qty列应该返回A列的值,如果当前custid的值为B,则qty列应该返回B列的值。
实现解决方案的第二步之后,生成以下输出结果:
...第三步删除不相关的交叉
(2)使用T-SQL的UNPIVOT运算符进行逆透视转换
SELECT empid,custid,qty
FROM dbo.EmpCustOrders
UNPIVOT(qty FOR custid IN(A,B,C,D)) AS U;
SQL SERVER技术内幕之7 透视与逆透视的更多相关文章
- SQL Server技术内幕笔记合集
SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...
- SQL SERVER技术内幕之10 可编程对象
一.变量 变量用于临时保存数据值,以供在声明它们的同一批处理语句中引用.例如,以下代码先声明一个数据类型为INT的变量@i,再将它赋值为10; DECLARE @i as INT; SET @i = ...
- SQL SERVER技术内幕之10 事务并发
1.事务 1.1事务的定义 事务是作为单个工作单元而执行的一系列操作.定义事务边界有显式和隐式两种.显式事务的定义以BEGIN TRAN作为开始,以COMMIT TRAN提交事务,以ROLLBACK ...
- SQL SERVER技术内幕之6 集合查询
1.定义 集合运算会对两个输入查询的结果集进行逐行比较,根据比较结果和所使用的集合运算来确定某一行是否应该包含在集合运算的结果中.因为集合运算是针对集合之间进行的计算,所以集合运算涉及的两个查询不能包 ...
- SQL SERVER技术内幕之8 分组集
分组集就是分组(GROUP BY子句)使用的一组属性,在传统的SQL中,一个聚合查询只能定义一个分组集: 假设现在不想生成4个单独的结果集,而是希望生成一个统一的结果集,其中包含所有4个分组集的聚合 ...
- SQL SERVER技术内幕之5 表表达式
表表达式是一种命名的查询表达式,代表一个有效的关系表.可以像其他表一样,在数据处理语句中使用表表达式.SQL Server支持4种类型的表表达式:派生表(derived table).公用表表达式(C ...
- SQL SERVER技术内幕之3 联接查询
JOIN表运算符对两个输入表进行操作.联接有三种基本类型:交叉联接.内联接和外联接.这三种联接的区别是它们采用的逻辑查询处理步骤各不相同,每种联接都有一套不同的步骤.交叉联接只有一个步骤----笛卡尔 ...
- SQL SERVER技术内幕之4 子查询
最外层查询的结果集会返回给调用者,称为外部查询.内部查询的结果是供外部查询使用的,也称为子查询.子查询可以分成独立子查询和相关子查询两类.独立子查询不依赖于它所属的外部查询,而相关子查询则须依赖它所属 ...
- SQL点滴19—T-SQL中的透视和逆透视
原文:SQL点滴19-T-SQL中的透视和逆透视 透视 今天抽一点时间来看看透视和逆透视语句,简单的说就是行列转换.假设一个销售表中存放着产品号,产品折扣,产品价格三个列,每一种产品号可能有多种折扣, ...
随机推荐
- C语言思维导图总结
- Git使用列表(四)
最近,由于自己的一个项目,导致自己的关于自己的要使用Git的很多的命令,突然发现自己的git的还有许多不知道的东西 不过,在这个工作的过程中,也发现自己的一些很大的缺陷,就是自己题目理解力有限,明明就 ...
- Android APP架构设计——MVP的使用示例
0. 前言 为了更好地进行移动端架构设计,我们最常用的就是MVC.MVP和MVVM,作为三个最耳熟能详的三大架构,应用可谓非常广泛.对于这三种架构设计以及优缺点已经在Android APP架构设计-- ...
- 北京Uber优步司机奖励政策(3月9日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- ORB-SLAM(五)KeyFrameDataBase类
关键帧数据库通过预先训练好的词典,维护一个向量std::vector<list<KeyFrame*> > mvInvertedFile; 该向量中mvInvertedFile[ ...
- WeTest功能优化第3期:业内首创,有声音的云真机
第3期功能优化目录 [云真机远程调试]音频同步传输实现测试有声 [兼容性测试报告]新增视频助力动态定位问题 [云真机远程调试]菜单栏优化助力机型选择 本期介绍的新功能,秉承创造用户需求的理念,在云真机 ...
- 100万套PPT模板,包含全宇宙所有主题类型PPT,绕宇宙100圈,持续更新
100万套PPT模板,包含全宇宙所有主题类型PPT(全部免费,都是精品,没有一张垃圾不好看的PPT,任何一张PPT拿来套入自己的信息就可以立马使用),绕宇宙100圈,任意一个模板在某文库上都价不菲.强 ...
- Fiddler - 拦截手机请求
1. 在电脑上安装Fillder. 安装好之后的Fiddler 打开是这样的: 2. 浏览器访问http://127.0.0.1:8888/fiddler,下载证书并安装 3. 打开抓取https请求 ...
- 【CentOS】下安装RabbitMQ教程
系统版本: 安装依赖: 由于RabbitMQ依赖Erlang, 所以需要先安装Erlang. Erlang的安装方式大概有两种: (1) Erlang Solution安装(推荐) wget http ...
- [JSON].typeOf( keyPath )
语法:[JSON].typeOf( keyPath ) 返回:[String | Number | Boolean | Json | Array | Function | 空字符] 说明:获取指定键 ...