写在前面

今天休息,抽空了解下pivot和unpivot,记得老师讲行转列的时候,貌似提到过,不过他说的最多的就是“这个你们私下可以自己学,很简单的...”,简单你咋不讲呢,不吐槽他了,还是好好整理下上午自学的内容吧。

pivot运算符实现透视转换

透视转换是指:将一种数据从行转为列的状态的处理手段。主要经历三个逻辑处理阶段(分组,扩展,聚合)。

sql2005引入的表的运算符-Pivot,跟其他表运算符(如join)类似,它也是在查询的from子句上下文中执行操作,主要对某原表过表表达式进行操作,返回一个结果表。

pivot运算符有重要地方需要注意:不必为他显示指定分组元素,或goup by子句,因为它会隐式将那些没有指定为扩展元素,也没有指定为聚合元素的那些元素作为分组元素。

创建student表如下:

用pivot行转列语句如下:

select StuName,isnull(语文,) as 语文 ,isnull(数学,)as 数学 ,isnull(英语,) as 英语 from student 

 pivot(min(StuGrade) for StuSubject in(语文,数学,英语))p

这里StuGrade作为聚合元素,StuSubject作为扩展元素,所以剩下的StuName就自动成了分组元素

结果如下:

unpivot运算符实现逆透视转换

逆透视是指:一种将数据从列转换成行状态的处理手段。主要经过三个逻辑处理阶段(生成副本,提取元素,删除不相关的交叉)

注意的是:经过透视转换得到的表再进行逆透视转换,并不会得到原来的表,因为逆透视只是把透视转换的表再转换一个格式而已,但是经过透视转换后再经过逆透视则能还原表的信息,即透视转换中聚合操作会丢失原表的详细信息,而逆透视则不会丢失任何信息。(因为没有经过聚合操作)

这里需要借用经过透视转换的结果集。代码如下:

with cc as
(
select stuName,isnull(数学,) as 数学,isnull(语文,)as 语文,isnull(英语,)as 英语 from
(
select StuName,isnull(语文,) as 语文 ,isnull(数学,)as 数学 ,isnull(英语,) as 英语 from student pivot(min(StuGrade) for StuSubject in(语文,数学,英语))p
)
select stuName,StuSubject,StuGrade
from cc
unpivot(StuGrade for StuSubject in(语文,数学,英语))as s

这里通过cte创建临时结果集,注意upivot跟pivot的写法区别就是:无须经过聚合操作,所以很好记。

总结

老师说数据库是很重要的技术,以后工作中离不开它,所以我要好好学习,以后遇到不懂的一定要问,大声说出来。还有就是平时做作业的时候,不会做,不要急着找答案,这样虽然做出来,自己也忘的很快啊,多想,多练,多说(这个看场合,不该说的一定要憋住了),加油!

T-Sql中的pivot和unpivot的更多相关文章

  1. Spark SQL中列转行(UNPIVOT)的两种方法

    行列之间的互相转换是ETL中的常见需求,在Spark SQL中,行转列有内建的PIVOT函数可用,没什么特别之处.而列转行要稍微麻烦点.本文整理了2种可行的列转行方法,供参考. 本文链接:https: ...

  2. sql行列转换PIVOT与unPIVOT

    基本语法 select * from Mould pivot ( count(ID)for ProductTypeCode in ( [FC], [RCU], [RCD] )) as PVT; wit ...

  3. SQL Server 使用 Pivot 和 UnPivot 实现行列转换

    对于行列转换的数据,通常也就是在做报表的时候用的比较多,之前也零零散散的看了一些,今天就来总结一下. 先创建一个用于演示的临时表: create table #temp ( 年份 ) null, 月份 ...

  4. T-SQL Recipes之Dynamic PIVOT and UNPIVOT

    PIVOT PIVOT在行转列的时候经常用到,最便捷的方式就是通过示例来理解它的作用. 示例1 Query to Return Select Product Data from AdventureWo ...

  5. SQL(横表和纵表)行列转换,PIVOT与UNPIVOT的区别和使用方法举例,合并列的例子

    使用过SQL Server 2000的人都知道,要想实现行列转换,必须综合利用聚合函数和动态SQL,具体实现起来需要一定的技巧,而在SQL Server 2005中,使用新引进的关键字PIVOT/UN ...

  6. 通过sql做数据透视表,数据库表行列转换(pivot和Unpivot用法)(一)

    在mssql中大家都知道可以使用pivot来统计数据,实现像excel的透视表功能 一.MSsqlserver中我们通常的用法 1.Sqlserver数据库测试 ---创建测试表 Create tab ...

  7. SQL Server 行列相互转换命令:PIVOT和UNPIVOT使用详解

    一.使用PIVOT和UNPIVOT命令的SQL Server版本要求 1.数据库的最低版本要求为SQL Server 2005 或更高. 2.必须将数据库的兼容级别设置为90 或更高. 3.查看我的数 ...

  8. PIVOT 和 UNPIVOT 命令的SQL Server版本

    I:使用 PIVOT 和 UNPIVOT 命令的SQL Server版本要求 1.数据库的最低版本要求为 SQL Server 2005 或 更高 2.必须将数据库的兼容级别设置为 90 或 更高 3 ...

  9. sql pivot、unpivot和partition by用法

    原文:sql pivot.unpivot和partition by用法 演示脚本 from sys.sysobjects where name = 'Student' AND type = 'U') ...

随机推荐

  1. JAVA FILE or I/O学习 - File学习

    public class FileKnow { public static void main(String[] args) { //构建file对象 ,参数表示文件所在的路径 File file = ...

  2. IOS文件沙盒

    在进行IPhone开发的时候,常常需要将简单的数据保存到文件中,以便下次再重新打开的时候能够读取文件中保存的数据. 下面就来做一个简单的demo: 步骤: 1.创建一个SingleView项目,带有x ...

  3. Git基础 1 ---- 版本控制系统的介绍

    1 Git 1 版本控制系统 vcs - version control system 2 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统 3 版本控制系统的主要功能 1 ...

  4. jQ 操作积累

    1.判断radio是否选中:方式一:var val=$('input:radio[name="sex"]:checked').val(); //(val==null 未选中) 方式 ...

  5. 玩转Bootstarp(连载)

    一.Bootstarp是什么? 简单.灵活的用于搭建WEB页面的HTML.CSS.JS的工具集 (基于HTML5和CSS3) 总结:简洁强大的前端开发框架,可以让WEB开发更迅速.更简单 二.如何使用 ...

  6. ppt类似工具AxeFile使用心得

    一个所谓的傻瓜式过渡效果自动生成工具.定义好展示窗口大小,加入时序.所谓的闪烁效果,也是相当的滑稽. 是一个非专业的简单的快速PPT工具. 但是体现的确是扁平化的设计思路,很值得深思. ------ ...

  7. Spring AOP报错

    八月 01, 2016 10:08:48 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRe ...

  8. (zz)Linux下Gcc生成和使用静态库和动态库详解

    http://blog.chinaunix.net/uid-23592843-id-223539.html

  9. 转: 用css把图片转为灰色图

    小tip: 使用CSS将图片转换成黑白(灰色.置灰) by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.co ...

  10. USB CCID协议和PC/SC标准

    CCID是USB Chip/Smart Card Interface Devices,也就是USB芯片智能卡接口设备,是USB规范下的一种设备类型.就像HID设备一样,需要参考USB规范来写固件程序来 ...