Oracle 行轉列小結,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函數:
它是一種特有的Function Compute方式,相當於電腦語言中的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
行轉列包括行轉列、列轉行、多列轉換成字串、多行轉換成字串、字串轉換成多行和字串轉換成多列六種情況,如果大家有興趣,可以進行進一步的研究。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。