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