Oracle 行轉列小結


      近期在工作中。對行轉列進行了應用,在此做一個簡單的小結。


      轉換步驟例如以下:

        1、創建表結構

CREATE TABLE RowToCol 
( 
  ID NUMBER(10) not null, 
  USER_NAME VARCHAR2(20 CHAR), 
  COURSE VARCHAR2(20 CHAR), 
  SCORE VARCHAR2(20 CHAR)
) 

        2、插入測試數據(原始數據如圖)


        



        3、行轉列實現效果


        


        4、詳細實現

        主要原理是利用decode函數、聚集函數(sum/max/min/avg),結合group by分組實現的,詳細sql例如以下:


select t.user_name as 姓名,
    MAX(decode(t.course,'語文',score,null)) as 語文,
    MAX(decode(t.course,'數學',score,null)) as 數學。
    MAX(decode(t.course,'英語',score,null)) as 英語
from RowToCol t group by t.user_name  order by t.user_name


      
      *當要分組的值,如樣例中的score列是數值型,則聚集函數能夠使用sum/max/min/avg,可是字符行的僅僅能使用max/min。




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


      附注:

      decode函數:

      它是一種特有的函數計算方式,相當於計算機語言中的if...else...

       decode(條件。值1。翻譯值1,值2。翻譯值2,...值n。翻譯值n,缺省值)

      其理解為:

       

if (條件==值1)
 then    
return(翻譯值1)
elsif (條件==值2)
then    
return(翻譯值2)    
......
elsif (條件==值n)
 then    
return(翻譯值n)
else    
return(缺省值)
end if


      行轉列包含行轉列、列轉行、多列轉換成字符串、多行轉換成字符串、字符串轉換成多行和字符串轉換成多列六種情況。假設大家有興趣,能夠進行進一步的研究。


免責聲明!

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



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