Oracle Pivot簡單用法
阿新 • • 發佈:2019-01-05
lec 別名 部分 const mon rim rac bold creat
因為工作中經常需要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簡單用法