日期:2014-05-18  浏览次数:20570 次

简单的应用问题!
有如下列:

  班级代码(dm)         分数(score)
      1                                 10
      2                                 30
      3                               -20
      4                               -30
      5                                 40
      1                                 60


如何实现如下结果:
班级代码(dm)     加奖分数(score)       加奖合计       班级代码       扣奖分数         扣奖合计
      1                             10                             70                     3                   -20                   -20
      1                             60                                                     4                   -30                   -30
      2                             30                             30
      5                             40                             40

也就是说将单独的那个分数列,用两列显示出来分别显示的> 0的一列和 <0的一列。完了算出来每个班级代码分数的合计也单独用一列显示出来。(如上图的结果)

------解决方案--------------------
看看這個效果可以接受不?


--創建測試環境
Create Table TEST
(班级代码 Int,
分数 Int)
--插入數據
Insert TEST Select 1, 10
Union All Select 2, 30
Union All Select 3, -20
Union All Select 4, -30
Union All Select 5, 40
Union All Select 1, 60
GO
--測試
Select ID = Identity(Int, 1, 1), * Into #T From TEST Order By 班级代码, 分数
Select OrderID = (Select Count(ID) From #T Where ID <= A.ID And 分数 > 0), * Into #T1 From #T A Where 分数 > 0
Select OrderID = (Select Count(ID) From #T Where ID <= A.ID And 分数 < 0), * Into #T2 From #T A Where 分数 < 0

Select
A.班级代码 As 班级代码1,
A.分数 As 加奖分数,
(Select SUM(分数) From #T1 Where 班级代码 = A.班级代码) As 加奖合计,
B.班级代码 As 班级代码2,
B.分数 As 扣奖分数,
(Select SUM(分数) From #T2 Where 班级代码 = A.班级代码) As 扣奖合计
From
#T1 A
Full Join
#T2