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...