Sql小白请教下数据转换问题

select Name,

sum(case Course when '语文' then Gradeid else '0' end) as 语文,

sum(case Course when '数学' then Gradeid else '0' end) as 数学,

sum(case Course when '英语' then Gradeid else '0' end) as 英语

from student

group by Name

图片说明图片说明

sql

5个回答

case when语法写的有点儿问题
try

 select Name,
sum(case  when Course = '语文' then Gradeid else 0 end) as 语文,
sum(case  when Course = '数学' then Gradeid else 0 end) as 数学,
sum(case when Course =  '英语' then Gradeid else 0 end) as 英语
from student
group by Name
qq_38599193
qq_38599193 回复欧阳嘉: 没事了,搞定了,是我自己把数据类型放错了,谢谢大神哈!
3 年多之前 回复
iamoyjj
欧阳嘉 gradeid什么数据类型?
3 年多之前 回复
qq_38599193
qq_38599193 回复欧阳嘉: 你好,大神,试过了。一样报这样的错!
3 年多之前 回复

else分支应该是数值类型,写成字符串“0”是不对的。

你现在是 string 转 int 啊,当等于 “0” 的时候 转成 int 肯定报错啦,双引号 去掉就完事了

试过了,mysql上可以,oracle上不行。

试下这种:
select id,name,sum(decode(course,'语文',score,null)) "语文",
sum(decode(course,'数学',score,null)) "数学",
sum(decode(course,'英语',score,null)) "英语",
sum(decode(course,'历史',score,null)) "历史",
sum(decode(course,'化学',score,null)) "化学"
from HANG2LIE
group by id,name;

qq_38599193
qq_38599193 回复微风吹过的夏天2016: ![图片说明](http://img.ask.csdn.net/upload/201705/08/1494247310_87722.png)
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐