最近在工作中,對行轉列進行了應用,在此做一個簡單的小結。
轉換過程如下:
CREATE TABLE RowToCol ( ID NUMBER(10) not null, USER_NAME VARCHAR2(20 CHAR), COURSE VARCHAR2(20 CHAR), SCORE VARCHAR2(20 CHAR) )
主要原理是利用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
------------------------------------------------------------------------------------------------------------------------------------------------------
附注:
它是一種特有的函數計算方式,相當於計算機語言中的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
行轉列包括行轉列、列轉行、多列轉換成字符串、多行轉換成字符串、字符串轉換成多行和字符串轉換成多列六種情況,如果大家有興趣,可以進行進一步的研究。