ORACLE 行转列的方法

前期准备

创建一个表

create table student_score(
    name varchar2(30),
    subject varchar(20),
    score number(4,1)
);

插入数据

insert into student_score (name,subject,score)values('张三','Chinese',90);
insert into student_score (name,subject,score)values('张三','Mathematics',80);
insert into student_score (name,subject,score)values('张三','English',79);

insert into student_score (name,subject,score)values('li shi','Chinese',96);
insert into student_score (name,subject,score)values('li shi','Mathematics',86);
insert into student_score (name,subject,score)values('li shi','English',76);

insert into student_score (name,subject,score)values('wang wu','Chinese',92);
insert into student_score (name,subject,score)values('wang wu','Mathematics',82);
insert into student_score (name,subject,score)values('wang wu','English',72);

以下命令

用decode命令

select name,
sum(decode(subject, 'Chinese', nvl(score, 0), 0)) "Chinese",
sum(decode(subject, 'Mathematics', nvl(score, 0), 0)) "Mathematics",
sum(decode(subject, 'English', nvl(score, 0), 0)) "English"
from student_score
group by name;

获得结果:

NAME                              Chinese Mathematics    English
------------------------------ ---------- ----------- ----------
张三                                   90          80         79
wang wu                                92          82         72
li shi                                 96          86         76

用case then命令

SELECT NAME,
SUM(CASE WHEN SUBJECT='CHINESE'
THEN NVL(SCORE,0)
ELSE 0
END) "CHINESE",
SUM(CASE WHEN SUBJECT='MATHEMATICS'
THEN NVL(SCORE,0)
ELSE 0
END) "MATHEMATICS",
SUM(CASE WHEN SUBJECT='ENGLISH'
THEN NVL(SCORE,0)
ELSE 0
END) "ENGLISH"
FROM STUDENT_SCORE
GROUP BY NAME;

使用decode判断字符串是否一样

DECODE(value,if 条件1,then 值1,if 条件2,then 值2,...,else 其他值)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值