1. 程式人生 > >Oracle Pivot簡單用法

Oracle Pivot簡單用法

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簡單用法