码迷,mamicode.com
首页 > 数据库 > 详细

Oracle Pivot简单用法

时间:2019-01-05 15:46:03      阅读:1994      评论:0      收藏:0      [点我收藏+]

标签:varchar   表示   group by   http   info   数据   结果   rod   语句   

因为工作中经常需要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));

结果如下:

技术分享图片

Oracle Pivot简单用法

标签:varchar   表示   group by   http   info   数据   结果   rod   语句   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!