程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle行轉列小結

Oracle行轉列小結

編輯: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函數:

它是一種特有的函數計算方式,相當於計算機語言中的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

行轉列包括行轉列、列轉行、多列轉換成字符串、多行轉換成字符串、字符串轉換成多行和字符串轉換成多列六種情況,如果大家有興趣,可以進行進一步的研究。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved