sql中行列转换

之前在赛门铁克笔试时遇到一道SQL的数据库查询题,经过自己分析和寻求帮助解决了,现在分享下:
1.表score(ID,Name,Course,Score)
数据:
ID    Name       Course     Score
0     wang	English	    99
0     wang	Chinese	    90
0     wang	Math 	    90
1	pp	Chinese	    99
1	pp	Math	    99
1	pp	English	    88

 表student(ID,Name,Chinese,Math,English)
数据:
ID   Name    Chinese  Math  English
0    wang    90       90    99
1    pp      99       99    88

 

2.由表score获得表student数据(行->列)

对于MySQL来说:
select ID,
    name,
    sum(case
        when course = 'Chinese' then score
    end) 'Chinese',
    sum(case
        when course = 'Math' then score
    end) 'Math',
    sum(case
        when course = 'English' then score
    end) 'English'
from
    score
group by ID,Name;
但是对于Oracle来说,可以有decode函数实现:
select ID,
    Name,
    sum(decode(Course, 'Chinese', Score, null)) as Chinese,
    sum(decode(Course, 'Math', Score, null)) as Math,
    sum(decode(Course, 'English', Score, null)) as English
from
    score
group by ID,Name;

3.由表student获取score查询结果(列->行)

select id,name,'Chinese' course,chinese score from student
union
select id,name,'Math' course,math score from student
union
select id,name,'English' course,english score from student
order by id;

以上学习参考了别人的博客,只希望自己也总结下,记忆深刻点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值