這篇博文寫的是簡單的行列轉換的,以一個具體的例子來給出。
以前在論壇上有人問過相關的問題,上面的回答五光十色,有很多是可行的,當然更多的是自以為很高端,實際卻不着邊際的回答。下面進入正題。
part1:列轉行。需求:
示例給出這么一張表:
表定義如下:
create table TEST_TB_GRADE ( ID NUMBER(10) not null, USER_NAME VARCHAR2(20 CHAR), COURSE VARCHAR2(20 CHAR), SCORE FLOAT )
要求轉換成為:
下面給出一個可行的PL/SQL語句:
select t.user_name as 姓名, sum(decode(t.course, '語文', score,null)) as 語文, sum(decode(t.course, '數學', score,null)) as 數學, sum(decode(t.course, '英語', score,null)) as 英語 from test_tb_grade t group by t.user_name order by t.user_name
實現效果如下圖需求所示。
Part2:行轉列。需求:
示例給出這樣一張表
表結構如下:
create table TEST_TB_GRADE2 ( ID NUMBER(10) not null, USER_NAME VARCHAR2(20 CHAR), CN_SCORE FLOAT, MATH_SCORE FLOAT, EN_SCORE FLOAT )
需要轉換成如下形式:
下面給出一個可執行的PL/SQL語句:
select user_name, '語文' as COURSE , CN_SCORE as SCORE from test_tb_grade2 union all select user_name, '數學' as COURSE, MATH_SCORE as SCORE from test_tb_grade2 union all select user_name, '英語' as COURSE, EN_SCORE as SCORE from test_tb_grade2 order by user_name,COURSE
實現效果如下圖需求所示。
本文旨以一個具體的例子,給出一種Oracle中行列轉換的方案,沒有什么可圈可點的地方,歡迎給出其他實現,也歡迎批評指正!
【請點擊下面的“綠色通道”-----“關注DebugLZQ” ,共同交流進步~】