简单的应用问题!
有如下列:
班级代码(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