Oracle行轉列,列轉行,行列相互轉換


1、行轉列

SELECT WM_CONCAT(COLUMN_NAME) COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'T_CREATE_TABLE_1'
SELECT LISTAGG(COLUMN_NAME,';') WITHIN GROUP(ORDER BY COLUMN_NAME) COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'T_CREATE_TABLE_1'

注:WM_CONCAT是未公開的函數,在10.2.0.5上,其返回類型從varchar2變為了clob,而在12c當中,已經取消了此函數,所以最好別用

LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX),用法就像聚合函數一樣,通過Group by語句,把每個Group的一個字段,拼接起來 

上面2個行數是把行用符號拼接成一列;還有PIVOT行數,可以把行轉成多列

SELECT * FROM T_CREATE_TABLE_1 PIVOT (MAX(COLUMN_1) FOR COLUMN_5 IN ('列1','列2','列3'));

 

2、列轉行

SELECT COLUMN_ID,COLUMN_NAME,COLUMN_DATA FROM T_CREATE_TABLE_1 UNPIVOT (COLUMN_DATA FOR COLUMN_NAME IN (COLUMN_1,COLUMN_5));

注:轉換的列必須數據類型一致

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM