oracle固定列的行列转换

先建个表吧~
create table kecheng
(
id NUMBER,
name VARCHAR2(20),
course VARCHAR2(20),
score NUMBER
);
insert into kecheng (id, name, course, score)
values (1, ‘张三’, ‘语文’, 67);
insert into kecheng (id, name, course, score)
values (1, ‘张三’, ‘数学’, 76);
insert into kecheng (id, name, course, score)
values (1, ‘张三’, ‘英语’, 43);
insert into kecheng (id, name, course, score)
values (1, ‘张三’, ‘历史’, 56);
insert into kecheng (id, name, course, score)
values (1, ‘张三’, ‘化学’, 11);
insert into kecheng (id, name, course, score)
values (2, ‘李四’, ‘语文’, 54);
insert into kecheng (id, name, course, score)
values (2, ‘李四’, ‘数学’, 81);
insert into kecheng (id, name, course, score)
values (2, ‘李四’, ‘英语’, 64);
insert into kecheng (id, name, course, score)
values (2, ‘李四’, ‘历史’, 93);
insert into kecheng (id, name, course, score)
values (2, ‘李四’, ‘化学’, 27);
insert into kecheng (id, name, course, score)
values (3, ‘王五’, ‘语文’, 24);
insert into kecheng (id, name, course, score)
values (3, ‘王五’, ‘数学’, 25);
insert into kecheng (id, name, course, score)
values (3, ‘王五’, ‘英语’, 8);
insert into kecheng (id, name, course, score)
values (3, ‘王五’, ‘历史’, 45);
insert into kecheng (id, name, course, score)
values (3, ‘王五’, ‘化学’, 1);
commit;
这里写图片描述

1.Decode方式(固定列)
介绍下decode()函数decode(A,’B’,C,’D’)
如果A为B就把A替换成C否则显示D
SELECT ID,NAME,
SUM(DECODE(course,’语文’,score,0)) 语文,–这里使用max,min都可以~
SUM(DECODE(course,’数学’,score,0)) 数学,
SUM(DECODE(course,’英语’,score,0)) 英语,
SUM(DECODE(course,’历史’,score,0)) 历史,
SUM(DECODE(course,’化学’,score,0)) 化学
FROM kecheng GROUP BY ID ,NAME
这里写图片描述

2.Case方式
Case when A=B then C else D end
当A等于B的时候,A显示为C否则显示D
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) 化学
FROM kecheng GROUP BY ID,NAME
输出结果跟上方相同的

3.wmsys.wm_concat行列转换函数
这玩意儿的前世今生,想必大多人都知道
想当年,在我们需要将某字段多行内容拼接起来的时候,wm_concat提供了很好的方法
这使得这个未公开的函数,得到了广泛的宣传与运用
但是,不公开,英文是undocumented,就意味着随时可能发生变更
这不,10.2.0.5上,其返回类型从varchar2变为了clob
而在12c当中,干脆就取消了此函数,这个函数不能用也是正常的,会提示标识符无效~
SELECT ID,NAME,wm_concat(course || ‘:’||score) a FROM kecheng GROUP BY ID ,NAME;
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值