首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

查询简单的有关问题

2012-03-07 
查询简单的问题!有如下列:班级代码(dm)分数(score)1102303-204-30540160现在我实现如下查询结果:班级代码

查询简单的问题!
有如下列:

  班级代码(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


/*
班级代码 加奖 加奖合计 班级代码 加奖 加奖合计
----------- ----------- ----------- ----------- ----------- -----------


1 10 70 NULL NULL NULL
1 60 70 NULL NULL NULL
2 30 30 NULL NULL NULL
NULL NULL NULL 3 -20 -20
NULL NULL NULL 4 -30 -30
5 40 40 NULL NULL NULL

(6 row(s) affected)
*/

热点排行