初學Oracle UNPIVOT,PIVOT,WMSYS.WM_CONCAT三個函數

最近有接觸到Oracle UNPIVOT,PIVOT,WMSYS.WM_CONCAT,以免忘記,整理如下:

--------------------------------------

UNPIVOT的用法:

原始資料如下圖:

wKioL1XeXpDSk_XxAACm1UF3Sl4175.jpg

現在要將資料轉換成如下格式:

wKioL1XeX6WghQlpAAFeLLncXe0006.jpg

將資料按照INQTY,OUTQTY,REMAININGQTY三個欄位進行列轉行的處理.實現上面的轉換,使用的函數是UNPIVOT,具體實現代碼如下:

SELECT WEEKLY, ML, CVE, ITEMS, ITEM, QUANTITY

  FROM TESTP UNPIVOT(QUANTITY FOR ITEM IN(INQTY, OUTQTY, remainingqty))

 WHERE ID = '1';

-----------------------------------------------

PIVOT的用法:

如果原始資料是如下圖這樣:

wKioL1XeYeeQ6MKaAAEYyvpuROk393.jpg

希望資料按照如下圖片顯示:

wKioL1XeYuTC92atAAFvpTzlXT4384.jpg

首先將資料根據INQTY,OUTQTY,REMAININGQTY三個欄位進行列轉行的處理,然後再根據Weekly欄位做行轉列的處理.具體實現代碼如下:

SELECT *

  FROM (SELECT WEEKLY, ML, CVE, ITEMS, ITEM, QUANTITY

           FROM TESTP UNPIVOT(QUANTITY FOR ITEM IN(INQTY,OUTQTY,remainingqty))

          WHERE ID = '1') PIVOT(SUM(QUANTITY) FOR WEEKLY IN('W150826','W150827'))

 ORDER BY ML, CVE, ITEMS;

需要注意的是,PIVOT函數中的紅色字體部分只能是聚合函數,綠色字體部分不能是動態的字串[就是不能直接填寫一個欄位放在該處].

--------------------------------------------

WMSYS.WM_CONCAT的用法:

原始資料如下圖:

wKiom1Xft9-A2t8NAAC_gcLVEnI416.jpg

希望資料按ID,WEEKLY,ML,CVE group by 彙總,多個items以逗號分隔,顯示在一個單元格里面:

wKiom1XfuVbyQWFFAABxqmUCqTI390.jpg

具體實現代碼如下:

 SELECT ID, weekly, ml, cve, to_char(WMSYS.WM_CONCAT(items))

   FROM TESTP

  WHERE ID = '1'

  GROUP BY ID, weekly, ml, cve

  ORDER BY weekly;










發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章