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

前端之家收集整理的这篇文章主要介绍了oracle sql小结(主要讲横列转换的例子)decode 以及case前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

--建表

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

分享图片

猜你在找的Oracle相关文章