加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle sql小结(主要讲横列转换的例子)decode 以及case

发布时间:2020-12-12 13:41:45 所属栏目:百科 来源:网络整理
导读:--建表 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,‘数学‘,76); insert into keche

--建表

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,‘数学‘,76);
insert into kecheng (id,‘英语‘,43);
insert into kecheng (id,‘历史‘,56);
insert into kecheng (id,‘化学‘,11);
insert into kecheng (id,score)
values (2,‘李四‘,54);
insert into kecheng (id,81);
insert into kecheng (id,64);
insert into kecheng (id,93);
insert into kecheng (id,27);
insert into kecheng (id,score)
values (3,‘王五‘,24);
insert into kecheng (id,25);
insert into kecheng (id,8);
insert into kecheng (id,45);
insert into kecheng (id,1);
commit;

select * from KECHENG t;

--2.1、Decode方式
SELECT ID,NAME,
SUM(DECODE(course,score,0)) 语文,--这里使用max,min都可以
SUM(DECODE(course,0)) 数学,0)) 英语,0)) 历史,0)) 化学,
sum(decode(course,‘地理‘,0)) 地理,
sum(score) 总分
FROM kecheng
GROUP BY ID,NAME

?


--2.2、Case方式
SELECT ID,
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) 化学,
max(case when course=‘‘ then score else 0 end ) 无课,NAME

?

--结果与上方一样

--2.3、wmsys.wm_concat行列转换函数

SELECT ID,
wmsys.wm_concat(course || ‘:‘||score) course
FROM kecheng
GROUP BY ID,NAME;

?

--2.4、使用over(partition by t.u_id)用法
SELECT NAME,max(r) from (
SELECT name,wmsys.wm_concat(course ||score) OVER (PARTITION BY NAME order by course) r
FROM kecheng
) group by name

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读