oracle 使用 decode函数 或 case when 实现行转列

----创建测试表

create table student_score(

name varchar2(20),

subject varchar2(20),

score number(4,1)

);

-----插入测试数据

insert into student_score (name,subject,score)values('张三','语文',78);

insert into student_score (name,subject,score)values('张三','数学',88);

insert into student_score (name,subject,score)values('张三','英语',98);

insert into student_score (name,subject,score)values('李四','语文',89);

insert into student_score (name,subject,score)values('李四','数学',76);

insert into student_score (name,subject,score)values('李四','英语',90);

insert into student_score (name,subject,score)values('王五','语文',99);

insert into student_score (name,subject,score)values('王五','数学',66);

insert into student_score (name,subject,score)values('王五','英语',91);

-----decode行转列

select name "姓名",

sum(decode(subject, '语文', nvl(score, 0), 0)) "语文",

sum(decode(subject, '数学', nvl(score, 0), 0)) "数学",

sum(decode(subject, '英语', nvl(score, 0), 0)) "英语"

from student_score

group by name;

------ case when 行转列

select name "姓名",

sum(case when subject='语文'

then nvl(score,0)

else 0

end) "语文",

sum(case when subject='数学'

then nvl(score,0)

else 0

end) "数学",

sum(case when subject='英语'

then nvl(score,0)

else 0

end) "英语"

from student_score

group by name;

上一篇:ORACLE 定时运行存储过程经常使用时间间隔


下一篇:JAVA_SE基础——71.Random类制作随机验证码