Oracle Pivot简单用法

因为工作中经常需要excel或者报表输出,了解到pivot函数,查了部分资料,实在不够详尽,便想自己写一篇。pivot了解不深,只写写简单用法。

table t{

c1,c2,c3,c4

}

有库表t,其中有字段c1,c2,c3,c4

select * from (select c1,c2,c3,c4 from t) pivot(func(c1) for c2 in (v1,v2,v3))

其中func(c1)表示对c1使用func聚合函数

将输出的字段是c3,c4,v1,v2,v3,其中v1,v1,v3可以单独写别名。select * 可将*换成c3,c4,v1,v2,v3其中想要输出的值

这条语句相当于创建了一个表t2

table t2{

v1,v2,v3,

c3,c4}

其中v1相当于select func(c1) from t group by c2,c3,c4 where c2 = v1,v2,v3同理,同时输出的c3、c4也是根据以上规则分组出来的结果显示。

一下来看个实例:

1 CREATE table PRODUCT
2 (
3    ID                   NUMBER(10)           not null,
4    PRODUCT_NAME         VARCHAR2(50),
5    SELL_TIME            DATE,
6    SELL_COUNT           NUMBER(10),
7    constraint PK_PRODUCT primary key (ID)
8 );

插入如下数据:

然后要做的是根据2018年各产品销售量给出各个月销售数量表

执行以下sql:

 1 SELECT *
 2   FROM (SELECT A.PRODUCT_NAME, TO_CHAR(A.SELL_TIME,‘mm‘) AS mon, A.SELL_COUNT FROM PRODUCT A WHERE TO_CHAR(A.SELL_TIME,‘yyyy‘) = ‘2018‘)
 3 PIVOT(SUM(SELL_COUNT)
 4    FOR MON IN(‘01‘ M1,
 5               ‘02‘ M2,
 6               ‘03‘ M3,
 7               ‘04‘ M4,
 8               ‘05‘ M5,
 9               ‘06‘ M6,
10               ‘07‘ M7,
11               ‘08‘ M8,
12               ‘09‘ M9,
13               ‘10‘ M10,
14               ‘11‘ M11,
15               ‘12‘ M12));

结果如下:

原文地址:https://www.cnblogs.com/SaltFishYe/p/10196083.html

时间: 2024-11-10 15:17:26

Oracle Pivot简单用法的相关文章

Oracle CASE WHEN 用法介绍

Oracle CASE WHEN 用法介绍 1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASEWHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END 2. CASE WHEN 在语句中不同位置的用法 2.1 SELECT CASE WHEN 用法 SELECT gra

shell expect的简单用法【转】

用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理. 脚本代码如下:  ##############################################  #!/usr/bin/expect  set timeout 30  spawn ssh -l username 192.168.1.1  expect "password:"  send "ispa

oracle trim函数用法详解

在oracle数据库中,trim一般都是用在删除字符串两边的空格.实际上,trim也可以用来删除字符串两边的指定字符.并且trim指定删除的字符串只能是单个字符Oracle TRIM函数是很常见的函数,下面对Oracle TRIM函数的语法作了详尽的阐述说明,希望可以让您对Oracle TRIM函数有更深的认识. 如果提到Oracle TRIM函数,最简单的功能就是使用它来去除字符串的行首和行尾的空格,这个功能也是大家使用频率最高的一种.然而Oracle TRIM函数其实是具有删除“任意指定”字

ORACLE 中ROWNUM用法总结!

ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=),并非说用>,& gt;=,=,between..and 时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只要理解好了这个 rownum 伪列的意义就不应该感到惊奇,同样是伪列,rownum 与 rowid 可有些不一样,下面以例子说明 假设某个表 t1

Oracle %rowtype的用法

Oracle %rowtype的用法 编程语言 分享到: 专业回答 茗茶堂 2009-04-13 20:51 表示该类型为行数据类型,存储的是一行数据,一行数据里可以有多列,类似于表里的一行数据,也可以是游标里的一行数据,如:vs_row1 表%rowtype;vs_row2 游标%rowtype;

iOS block-base 动画简单用法+关键帧动画设置线性变化速度的问题

本文转载至 http://www.tuicool.com/articles/aANBF3m 时间 2014-12-07 20:13:37  segmentfault-博客原文  http://segmentfault.com/blog/alan/1190000002411296 iOS的各种动画相漂亮,相信这是吸引很多人买iPhone的原因之一.不仅如此,这还是吸引我做iOS开发的一大原因,因为在iOS上给界面实现一些像样的动画实在是太轻松了! 这里就介绍一下iOS的block-based an

Android WIFI 简单用法

随着Wifi的普及,在开发App的时候对wifi的考虑越来越多了.例如程序的升级在wifi下可以省很多流量,在通信软件中的视频通话.可以实现高画质的传输等等,Android提供了WifiManager类来帮助开发者们管理Wifi.下面就简单来说一下WifiManager的简单用法把. 权限: 为了使用WfiManager 我们需要在Androidmanifest.xml 加入权限: //本例中使用了前两个.具体请按照需要添加权限. <uses-permission android:name=&quo

Android中资源文件中的字符串数组string-array简单用法

在Android中,用string-array是一种简单的提取XML资源文件数据的方法. 例子如下: 把相应的数据放到values文件夹的strings.xml文件里,或是其他自定义的xml中都可以,以下操作方法相同. <?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="sports"> <item>足球<

expect简单用法

1 #!/usr/expect/bin/expect -f 2 3 4 set loginuser [lrange $argv 0 0] 5 set loginpass [lrange $argv 1 1] 6 set ipaddr [lrange $argv 2 2] 7 set port [lrange $argv 3 3] 8 set timeout [lrange $argv 4 4] 9 set from [lrange $argv 5 5] 10 set to [lrange $ar