oracle中将列数据变成行数据

create table test( name varchar2(20), course char(20), score number)insert into test values('张三','语文',99);insert into test values('张三','数学',98);insert into test values('李四','语文',80);insert into test values('李四','数学',88);insert into test values('王五','语文',79);insert into test values('王五','数学',78)select a.name, sum(decode(a.course,'语文',a.score,null))as"语文", sum(decode(a.score,'数学',a.score,null))as"数学" from test a group by a.name order by a.name desc

--最后的展现结果是全都为空,请问各位大神哪儿出了毛病?顺路就给指点出来哈!谢谢了
--下面是错误的结果

--正确的应该是

注意哦,上面图片是错误的,下面是正确的!

首先,你用的char类型,会自动在你字符串后边补空格,所以要用trim去空格

 

还有,你第二个decode,你没发现跟上边不同吗?decode最后那用0吧,省得出错,别用null,用这个吧

select a.name,
       sum(decode(trim(a.course),'语文',a.score,0))as"语文",
       sum(decode(trim(a.course),'数学',a.score,0))as"数学"
 from test a group by a.name order by a.name desc
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-27
把null都换成0,sum函数中有空至应该会计算失败的
第2个回答  2013-11-28
course char(20), 改为course varchar2(20),
相似回答