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));
结果如下:
posted on 2019-01-05 15:27 SaltFishYe 阅读(9997) 评论(0) 编辑 收藏 举报