Oracle 行转列实例二

2020-04-01  本文已影响0人  码农UP2U

上篇文章在行转列时给出了两种方法,现在给出另外的两种方法。
https://www.jianshu.com/p/7663fada0726

方法三

-- join

select ss.name, ss.score from student_score ss where ss.subject = '语文'
select ss.name, ss.score from student_score ss where ss.subject = '数学'
select ss.name, ss.score from student_score ss where ss.subject = '英语'

select ss01.name 姓名, ss01.score 语文, ss02.score 数学, ss03.score 英语 from (
       select ss.name, ss.score from student_score ss where ss.subject = '语文'
) ss01 join (select ss.name, ss.score from student_score ss where ss.subject = '数学') ss02 on ss01.name = ss02.name
join (select ss.name, ss.score from student_score ss where ss.subject = '英语') ss03 on ss01.name = ss03.name

方法四

-- union all

select ss.name, ss.score from student_score ss where ss.subject = '语文'
select ss.name, ss.score from student_score ss where ss.subject = '数学'
select ss.name, ss.score from student_score ss where ss.subject = '英语'

select t.name, sum(语文), sum(数学), sum(英语) from
(
select ss.name, ss.score 语文, 0 数学, 0 英语 from student_score ss where ss.subject = '语文'
union all
select ss.name, 0 语文, ss.score 数学, 0 英语 from student_score ss where ss.subject = '数学'
union all
select ss.name, 0 语文, 0 数学, ss.score 英语 from student_score ss where ss.subject = '英语'
) t
group by t.name


微信中搜索 “码农UP2U” 关注我的公众号吧!!!
上一篇下一篇

猜你喜欢

热点阅读