Oracle Pivot简单用法
Posted SaltFishYe
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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));
结果如下:
以上是关于Oracle Pivot简单用法的主要内容,如果未能解决你的问题,请参考以下文章