Oracle中的行列轉換 行轉列

2021-09-24 02:41:07 字數 4157 閱讀 9934

create table chengji

(id number,

name varchar2(20),

course varchar2(20),

score number

);

insert into chengji (id, name, course, score)

values (1, '張三', '語文', 67);

insert into chengji (id, name, course, score)

values (1, '張三', '數學', 76);

insert into chengji (id, name, course, score)

values (1, '張三', '英語', 43);

insert into chengji (id, name, course, score)

values (1, '張三', '歷史', 56);

insert into chengji (id, name, course, score)

values (1, '張三', '化學', 11);

insert into chengji (id, name, course, score)

values (2, '李四', '語文', 54);

insert into chengji (id, name, course, score)

values (2, '李四', '數學', 81);

insert into chengji (id, name, course, score)

values (2, '李四', '英語', 64);

insert into chengji (id, name, course, score)

values (2, '李四', '歷史', 93);

insert into chengji (id, name, course, score)

values (2, '李四', '化學', 27);

insert into chengji (id, name, course, score)

values (3, '王五', '語文', 24);

insert into chengji (id, name, course, score)

values (3, '王五', '數學', 25);

insert into chengji (id, name, course, score)

values (3, '王五', '英語', 58);

insert into chengji (id, name, course, score)

values (3, '王五', '歷史', 45);

insert into chengji (id, name, course, score)

values (3, '王五', '化學', 21);

insert into chengji (id, name, course, score)

values (4, 'jack', '語文', 86);

insert into chengji (id, name, course, score)

values (4, 'jack', '數學', 90);

insert into chengji (id, name, course, score)

values (4, 'jack', '英語', 93);

insert into chengji (id, name, course, score)

values (4, 'jack', '歷史', 77);

insert into chengji (id, name, course, score)

values (4, 'jack', '化學', 33);

insert into chengji (id, name, course, score)

values (5, 'helen', '語文', 89);

insert into chengji (id, name, course, score)

values (5, 'helen', '數學', 97);

insert into chengji (id, name, course, score)

values (5, 'helen', '英語', 95);

insert into chengji (id, name, course, score)

values (5, 'helen', '歷史', 73);

insert into chengji (id, name, course, score)

values (5, 'helen', '化學', 29);

commit;

看一下表結果

1.dedode函式

decode(條件,值1,返回值1,值2,返回值2,…值n,返回值n,預設值)

這個是decode的表示式,具體的含**釋為:

if 條件=值1 then

return(翻譯值1)

elsif 條件=值2 then

return(翻譯值2)

......

elsif 條件=值n then

return(翻譯值n)

else

return(預設值)

end if

select id,name,

sum(decode(course,'語文',score,0)) 語文,

sum(decode(course,'數學',score,0)) 數學,

sum(decode(course,'英語',score,0)) 英語,

sum(decode(course,'歷史',score,0)) 歷史,

sum(decode(course,'化學',score,0)) 化學,

sum(score) 總成績

case when end編寫和維護較麻煩,但是適合的場景較多。

select id,name,

max(case when course='語文' then score else 0 end) 語文,

max(case when course='數學' then score else 0 end) 數學,

max(case when course='英語' then score else 0 end) 英語,

max(case when course='化學' then score else 0 end) 化學,

max(case when course='歷史' then score else 0 end) 歷史,

sum(score) 總成績

from chengji

group by id,name

order by id;

3.pivot

select * from chengji

pivot(max(score) for course in( --course 即要轉成列的字段

'語文' as 語文, --max(score) 此處必須為聚合函式

'數學' as 數學, --in () 對要轉成列的每乙個值指定乙個列名

'英語' as 英語,

'化學' as 化學,

'歷史' as 歷史

))where 1=1 --這裡可以寫查詢條件,沒有可以直接不要where

Oracle 行列轉換(行合併與拆分)

在 oracle 中,將某乙個欄位的多行資料轉換成使用逗號風格的一行顯示,可以使用函式 wmsys.wm concat 達成。中也介紹到。參考這一段 case 1 列轉換行。以一行顯示所有員工的名字 select wmsys.wm concat name from employee 結果 user1...

Oracle行列轉換(行合併與拆分)

在 oracle 中,將某乙個欄位的多行資料轉換成使用逗號風格的一行顯示,可以使用函式 wmsys.wm concat 達成。這個在上一篇 中也介紹到。參考這一段 case 1 列轉換行。以一行顯示所有員工的名字 select wmsys.wm concat name from employee 結...

Oracle行列轉換

1.列轉行 create table t col row id int,c1 varchar2 10 c2 varchar2 10 c3 varchar2 10 insert into t col row values 1,v11 v21 v31 insert into t col row valu...