查询简单的问题!
有如下列:
班级代码(dm) 分数(score)
1 10
2 30
3 -20
4 -30
5 40
1 60
现在我实现如下查询结果:
班级代码 加奖 加奖合计 班级代码 扣奖 扣奖合计
1 10 20 1 -10 -10
1 10 2 -20 -20
根本没有一一对应!应该显示的是:
班级代码 加奖 加奖合计 班级代码 扣奖 扣奖合计
1 10 20 1 -10 -10
1 10 null null null
2 30 30 2 -20 -20
也就是说将单独的那个分数列,用两列显示出来分别显示的> 0的一列和 <0的一列。完了算出来每个班级代码分数的合计也单独用一列显示出来。(如上图的结果)
------解决方案----------------------是这样么?
create table tb(dm int,score int)
insert tb
select 1,10
union select 2,30
union select 3,-20
union select 4,-30
union select 5,40
union select 1,60
select 班级代码=case when score> 0 then dm else null end,
加奖=case when score> 0 then score else null end,
加奖合计=(select sum(score) from tb where t.dm=dm AND score> 0 ),
班级代码=case when score <0 then dm else null end,
加奖=case when score <0 then score else null end,
加奖合计=(select sum(score) from tb where t.dm=dm AND score <0 )
from tb t
drop table tb
/*
班级代码 加奖 加奖合计 班级代码 加奖