PIVOT和UNPIVOT使用详解

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

建表语句:

 1 DROP TABLE STUDENT;
 2 CREATE TABLE STUDENT (
 3 学生编号 VARCHAR2(20 BYTE) NULL ,
 4 姓名 VARCHAR2(20 BYTE) NULL ,
 5 性别 VARCHAR2(20 BYTE) NULL ,
 6 所属班级 VARCHAR2(20 BYTE) NULL
 7 )
 8 ;
 9
10 -- ----------------------------
11 -- Records of STUDENT
12 -- ----------------------------
13 INSERT INTO STUDENT VALUES (‘1‘, ‘李妹妹‘, ‘女‘, ‘初一 1班‘);
14 INSERT INTO STUDENT VALUES (‘2‘, ‘泰强‘, ‘男‘, ‘初一 1班‘);
15 INSERT INTO STUDENT VALUES (‘3‘, ‘泰映‘, ‘男‘, ‘初一 1班‘);
16 INSERT INTO STUDENT VALUES (‘4‘, ‘何谢‘, ‘男‘, ‘初一 1班‘);
17 INSERT INTO STUDENT VALUES (‘5‘, ‘李春‘, ‘男‘, ‘初二 1班‘);
18 INSERT INTO STUDENT VALUES (‘6‘, ‘吴歌‘, ‘男‘, ‘初二 1班‘);
19 INSERT INTO STUDENT VALUES (‘7‘, ‘林纯‘, ‘男‘, ‘初二 1班‘);
20 INSERT INTO STUDENT VALUES (‘8‘, ‘徐叶‘, ‘女‘, ‘初二 1班‘);
21 INSERT INTO STUDENT VALUES (‘9‘, ‘龙门‘, ‘男‘, ‘初三 1班‘);
22 INSERT INTO STUDENT VALUES (‘10‘, ‘小红‘, ‘女‘, ‘初三 1班‘);
23 INSERT INTO STUDENT VALUES (‘11‘, ‘小李‘, ‘男‘, ‘初三 1班‘);
24 INSERT INTO STUDENT VALUES (‘12‘, ‘小黄‘, ‘女‘, ‘初三 2班‘);
25 INSERT INTO STUDENT VALUES (‘13‘, ‘旺财‘, ‘男‘, ‘初三 2班‘);
26 INSERT INTO STUDENT VALUES (‘14‘, ‘强强‘, ‘男‘, ‘初二 1班‘);

语法:

 1     SELECT
 2
 3     <未透视的列>,
 4
 5     [第一个透视列] AS <列别名>,
 6
 7     [第二个透视列] AS <列别名>,
 8
 9     ...
10
11     [最后一个透视列] AS <列别名>
12
13     FROM (
14
15     <SELECT查询>
16
17     ) AS <源表>
18
19     PIVOT (
20
21     <聚合函数>(<列>)
22
23     FOR [<需要转换为行的列>] IN (
24
25     [第一个透视列], [第二个透视列],
26
27     ...
28
29     [最后一个透视列]
30
31     )
32
33     ) AS <数据透视表>
34
35     <可选的ORDER BY子句>; 

示例如语句:

 1 SELECT
 2     ‘班级总人数:‘ AS 总人数,
 3     初一1班,
 4     初一2班,
 5     初二1班,
 6     初三1班,
 7     初三2班
 8 FROM
 9     (
10         SELECT
11             所属班级,学生编号
12         FROM
13             student
14     ) PIVOT (
15         COUNT (学生编号) FOR 所属班级 IN (
16             ‘初一 1班‘ AS 初一1班,
17             ‘初一 2班‘ as 初一2班,
18             ‘初二 1班‘ as 初二1班,
19             ‘初三 1班‘ as 初三1班,
20             ‘初三 2班‘ as 初三2班
21         )
22     );

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

1 create table Fruit(id int,name varchar(20), Q1 int, Q2 int, Q3 int, Q4 int);
2 insert into Fruit values(1,‘苹果‘,1000,2000,3300,5000);
3 insert into Fruit values(2,‘橘子‘,3000,3000,3200,1500);
4 insert into Fruit values(3,‘香蕉‘,2500,3500,2200,2500);
5 insert into Fruit values(4,‘葡萄‘,1500,2500,1200,3500);
6 select * from Fruit

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

 1 SELECT
 2
 3 <未逆透视的列>,
 4
 5 [合并后的列] AS <列别名>,
 6
 7 [行值的列名] AS <列别名>
 8
 9 FROM (
10
11 <SELECT查询>
12
13 ) AS <源表>
14
15 UNPIVOT (
16
17 <行值的列名>
18
19 FOR <将原来多个列合并到单个列的列名> IN (
20
21 [第一个合并列], [第二个合并列],
22
23 ...
24
25 [最后一个合并列]
26
27 )
28
29 ) AS <数据逆透视表>
30
31 <可选的ORDER BY子句>; 

示例语句:

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

原文地址:https://www.cnblogs.com/xiaofengfree/p/10201003.html

时间: 2024-10-09 01:06:59

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

RectTransform详解

乾坤那个大挪移 ----------------------------------------------------------------- 我是分割线 ---------------------------------------------------------------------- 挪移地址:http://www.jianshu.com/p/dbefa746e50d RectTransform属性一览 前言 最近要做UI,有时候需要在代码中调整改变UI控件的属性,比如位置.大小

UGUI RectTransform详解

UGUI RectTransform.Unity RectTransform详解 The first:look look API. http://docs.unity3d.com/ScriptReference/RectTransform.html 在新的UI系统中,无论Button,Text,Image,Toggle等组件,都是基于RectTransform进行布局的. 你可以不知Button为何物,不知Text为何物,不知Image为何物,但是一定要知道RectTransform. 自Uni

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

序言 思来想去感觉redis中的list没什么好写的,如果单写几个命令的操作过于乏味,所以本篇最后我会根据redis中list数据类型的特殊属性,同时对比成熟的消息队列产品rabbitmq,使用redis实现一个消息队列. 为啦让本篇更有魅力,我再介绍下redis中list的基本属性,以及为什么使用redis中list列表类型,为什么使用消息队列,为什么不用rabbitmq而使用redis实现消息队列?呢,到这里为止,如果你是大咖,大牛,大神,大爷!不要听我吹牛逼啦,Close Page and

(转)详解八大排序算法

概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序.堆排序或归并排序序. 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短: 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到

13种排序算法详解

0.前言 从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算法题逐个分析一遍(博主当年自己学算法就是用这种比较笨的刷题学的,囧),不过又想了想,算法这东西,博主自己学的过程中一直深感,基础还是非常重要的,很多难题是基础类数据结构和题目的思想综合发散而来.比如说作为最基本的排序算法就种类很多,而事实上笔试面试过程中发现掌握的程度很一般,有很多题目,包括很多算法难题,其母题或者基本思想就是基于这些经典算法的,

Android研究之属性动画(Property Animation)完全解析详解下

 上一篇Android研究之属性动画(Property Animation)完全解析详解上已经基本展示了属性动画的核心用法: ObjectAnimator实现动画,ValueAnimator实现动画,AnimatorSet的使用等~ 当然了属性动画还有一部分的知识点,也能做出很不错的效果,将在本篇博客为您展示~ 1.如何使用xml文件来创建属性动画 大家肯定都清楚,View Animator .Drawable Animator都可以在anim文件夹下创建动画,然后在程序中使用,甚至在The

数据结构 - 红黑树(Red Black Tree)插入详解与实现(Java)

最终还是决定把红黑树的篇章一分为二,插入操作一篇,删除操作一篇,因为合在一起写篇幅实在太长了,写起来都觉得累,何况是阅读并理解的读者. 红黑树删除操作请参考 数据结构 - 红黑树(Red Black Tree)删除详解与实现(Java) 现在网络上最不缺的就是对某个知识点的讲解博文,各种花样标题百出,更有类似"一文讲懂xxx","史上最简单的xxx讲解","xxx看了还不懂你打我"之类云云.其中也不乏有些理论甚至是举例都雷同的两篇不同文章,至于作

Spring事务管理(详解+实例)

写这篇博客之前我首先读了<Spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: Spring事务机制详解 Spring事务配置的五种方式 Spring中的事务管理实例详解 1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱.这两个步骤必须是要么都执行要么都

转载:DenseNet算法详解

原文连接:http://blog.csdn.net/u014380165/article/details/75142664 参考连接:http://blog.csdn.net/u012938704/article/details/53468483 本文这里仅当学习笔记使用,具体细节建议前往原文细度. 论文:Densely Connected Convolutional Networks 论文链接:https://arxiv.org/pdf/1608.06993.pdf 代码的github链接:h