近期在工作中。對行轉列進行了應用,在此做一個簡單的小結。
轉換步驟例如以下:
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
行轉列包含行轉列、列轉行、多列轉換成字符串、多行轉換成字符串、字符串轉換成多行和字符串轉換成多列六種情況。假設大家有興趣,能夠進行進一步的研究。