一、使用PIVOT实现数据表的列转行

建表语句:

 DROP TABLE STUDENT;
 CREATE TABLE STUDENT (
 学生编号  BYTE) NULL ,
 姓名  BYTE) NULL ,
 性别  BYTE) NULL ,
 所属班级  BYTE) NULL
 )
 ;

 -- ----------------------------
 -- Records of STUDENT
 -- ----------------------------
 ', '李妹妹', '女', '初一 1班');
 ', '泰强', '男', '初一 1班');
 ', '泰映', '男', '初一 1班');
 ', '何谢', '男', '初一 1班');
 ', '李春', '男', '初二 1班');
 ', '吴歌', '男', '初二 1班');
 ', '林纯', '男', '初二 1班');
 ', '徐叶', '女', '初二 1班');
 ', '龙门', '男', '初三 1班');
 ', '小红', '女', '初三 1班');
 ', '小李', '男', '初三 1班');
 ', '小黄', '女', '初三 2班');
 ', '旺财', '男', '初三 2班');
 ', '强强', '男', '初二 1班');

语法:

     SELECT  

     <未透视的列>,  

     [第一个透视列] AS <列别名>,  

     [第二个透视列] AS <列别名>,  

     ...  

     [最后一个透视列] AS <列别名> 

     FROM (  

     <SELECT查询> 

     ) AS <源表> 

     PIVOT (  

     <聚合函数>(<列>)  

     FOR [<需要转换为行的列>] IN (  

     [第一个透视列], [第二个透视列],  

     ...  

     [最后一个透视列]  

     )  

     ) AS <数据透视表> 

     <可选的ORDER BY子句>; 

示例如语句:

 SELECT
     '班级总人数:' AS 总人数,
     初一1班,
     初一2班,
     初二1班,
     初三1班,
     初三2班
 FROM
     (
         SELECT
             所属班级,学生编号
         FROM
             student
     ) PIVOT (
         COUNT (学生编号) FOR 所属班级 IN (
             '初一 1班' AS 初一1班,
             '初一 2班' as 初一2班,
             '初二 1班' as 初二1班,
             '初三 1班' as 初三1班,
             '初三 2班' as 初三2班
         )
     );

二、使用UNPIVOT 实现的功能其实与PIVOT恰恰相反
建表语句:

 ), Q1 int, Q2 int, Q3 int, Q4 int);
 ,,,,);
 ,,,,);
 ,,,,);
 ,,,,);
 select * from Fruit

语法同PIVOT但是UNPIVOT的子句没有聚合函数
语法:

 SELECT  

 <未逆透视的列>,  

 [合并后的列] AS <列别名>,  

 [行值的列名] AS <列别名>

 FROM (  

 <SELECT查询>

 ) AS <源表>

 UNPIVOT (  

 <行值的列名>

 FOR <将原来多个列合并到单个列的列名> IN (  

 [第一个合并列], [第二个合并列],  

 ...  

 [最后一个合并列]  

 )  

 ) AS <数据逆透视表>

 <可选的ORDER BY子句>; 

示例语句:

 select id , name, jidu, xiaoshou from Fruit unpivot (xiaoshou for jidu in (q1, q2, q3, q4) )

PIVOT和UNPIVOT使用详解的更多相关文章

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

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

  2. T-SQL行列相互转换命令:PIVOT和UNPIVOT使用详解

    最近在维护一个ERP 做二次开发 ,在查找数据源的时候看到前辈写的SQL ,自己能力有限 ,就在网上找找有关这几个关键字的使用方法.做出随笔以做学习之用 T-SQL语句中,PIVOT命令可以实现数据表 ...

  3. SQL Server数据库PIVOT函数的使用详解(一)

    http://database.51cto.com/art/201108/285250.htm SQL Server数据库中,PIVOT在帮助中这样描述滴:可以使用 PIVOT 和UNPIVOT 关系 ...

  4. SQL Server数据库PIVOT函数的使用详解(二)

    动态的行转列 原理就是 把需要转成列的行拼出来 DECLARE @fieldName VARCHAR(); SET @fieldName=''; SELECT @fieldName = @fieldN ...

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

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

  6. 微软BI SSIS 2012 ETL 控件与案例精讲课程学习方式与面试准备详解

    开篇介绍 微软BI SSIS 2012 ETL 控件与案例精讲 (http://www.hellobi.com/course/21) 课程从2014年9月开始准备,到2014年12月在 天善BI学院  ...

  7. Redis数据结构详解之List(二)

    序言 思来想去感觉redis中的list没什么好写的,如果单写几个命令的操作过于乏味,所以本篇最后我会根据redis中list数据类型的特殊属性,同时对比成熟的消息队列产品rabbitmq,使用red ...

  8. Solr系列五:solr搜索详解(solr搜索流程介绍、查询语法及解析器详解)

    一.solr搜索流程介绍 1. 前面我们已经学习过Lucene搜索的流程,让我们再来回顾一下 流程说明: 首先获取用户输入的查询串,使用查询解析器QueryParser解析查询串生成查询对象Query ...

  9. JS-排序详解:冒泡排序、选择排序和快速排序

    JS-排序详解-冒泡排序 说明 时间复杂度指的是一个算法执行所耗费的时间 空间复杂度指运行完一个程序所需内存的大小 稳定指,如果a=b,a在b的前面,排序后a仍然在b的前面 不稳定指,如果a=b,a在 ...

随机推荐

  1. bzoj 1076

    发现自己已经把期望dp忘光了... 其实本质上非常简单,就是利用状压的思想跑期望 首先很容易设计出状态:记状态f[s][i]表示到了第i个点,之前已选过的点的状态为s时所能获得的最大期望得分 但是会发 ...

  2. git bash中的快捷键

    转载: https://www.cnblogs.com/dhuhewang/p/6504914.html 1.bash命令格式 命令 [-options]  [参数],如:tar  zxvf  dem ...

  3. jmeter BeanShell实例-----两个变量之间的断言对比

    jmeter BeanShell实例-----两个变量之间的断言对比 在jmeter的中,断言没法对两个变量的进行对比后判断,只能使用Bean Shell断言来进行,总是有人来问怎么写呢.这里写一个简 ...

  4. 饮冰三年-人工智能-linux-04 vim编辑器

    vim的三种模式:命令行模式.编辑模式.扩展模式 1:命令行模式下常见的操作 删除 a):dd 删除光标所在当前行 b):ndd   删除光标所在当前行后的n行 复制 c):yy 复制光标所在当前行 ...

  5. 插件使用一顶部消息提示---overhang

    overhang 是一个非常好的消息提示插件,它是在顶部提示. 官方网站:https://github.com/paulkr/overhang.js 使用方法 1.引入jquery库和jqeury u ...

  6. Just oj 2018 C语言程序设计竞赛(高级组)D: 四边形面积

    D: 四边形面积 时间限制: 1 s      内存限制: 128 MB      提交 我的状态 题目描述 有一个四边形,现在需要求它的面积 输入 输入四行,每行两个数整数xx, yy (1≤x,y ...

  7. C# 正则表达式匹配盘符

    if (!Regex.IsMatch(diskName, @"^[c-zC-Z](:\\)?$")) { throw new FormatException($"{dis ...

  8. lua生成UUID

    百度云盘地址: https://pan.baidu.com/s/1zo__vSeDGaHOvCJLyzHwvA GitHub地址: https://github.com/bungle/lua-rest ...

  9. .net remoting(1)简单例子

    1.例子(程序间的通讯) class Program { static void Main(string[] args) { HttpChannel _channel = ); ChannelServ ...

  10. 常用js正则表达式大全

    常用js正则表达式大全.一.校验数字的js正则表达式 1 数字:^[0-9]*$ 2 n位的数字:^\d{n}$ 3 至少n位的数字:^\d{n,}$ 4 m-n位的数字:^\d{m,n}$ 5 零和 ...