create table test_1
( id number,
name varchar2(20),
score number,
subject varchar2(20)
);
insert into test_1 values (1108,'cxj',86,'语文');
insert into test_1 values (1109,'cxj',76,'数学');
insert into test_1 values (1110,'cxj',56,'英语');
insert into test_1 values (1192,'xyz',74,'语文');
insert into test_1 values (1193,'xyz',71,'数学');
insert into test_1 values (1194,'xyz',72,'英语');
commit;
select * from test_1 t for update;
select t.name,
sum( decode(t.subject,'语文',t.score) ) 语文,
sum( decode(t.subject,'数学',t.score) ) 数学,
sum( decode(t.subject,'英语',t.score) ) 英语
from test_1 t group by t.name
select name,
max(decode(subject,'语文',score,0))语文,
max(decode(subject,'数学',score,0))数学,
max(decode(subject,'英语',score,0))英语
from grade group by name;
select name,
max(case when subject='语文' then score end)语文,
max(case when subject='数学' then score end)数学,
max(case when subject='英语' then score end)英语
from grade group by name;
用decode和组函数实现行列转换
select t.name "姓名",
max(decode(t.subject,'语文',t.score,0)) "语文",
max(decode(t.subject,'数学',t.score,0)) "数学",
max(decode(t.subject,'英语',t.score,0)) "英语"
from temp_1 t
group by t.name
select name 姓名,
(select score from temp1 b where b.Name=a.Name and b.subject='语文') 语文,
(select score from temp1 b where b.Name=a.Name and b.subject='数学') 数学,
(select score from temp1 b where b.Name=a.Name and b.subject='英语') 英语
from temp1 a group by name;