又一个相似的学生成绩表查询问题,麻烦了!
有如下表格:
学号 姓名 次数 成绩 日期
940001 王平 1 60 2006/5/7
940001 王平 2 70 2006/6/10
940001 王平 3 80 2006/9/22
940001 王平 4 90 2006/10/15
940002 张三 1 61 2006/11/2
940002 张三 2 76 2006/12/10
940002 张三 3 82 2007/1/22
940002 张三 4 92 2007/3/1
940003 刘威 1 82 2007/1/20
940003 刘威 2 82 2007/3/12
940004 赵亮 1 77 2007/1/20
...
要在上面表格中找出每位同学第一次和最后一次的考试分数,以及最后一次和第一次的成绩差的记录
其中:同一学生只有一条记录的,最后分数和第一次分数显示相同的值
结果如下:
姓名 第一次考试时间 第一次考试分数 最后一次考试时间 最后一次考试分数 增长
王平 2006/5/7 60 2006/10/15 90 30
张三 2006/11/2 61 2007/3/1 92 31
刘威 2007/1/20 82 2007/3/12 82 0
赵亮 2007/1/20 77 2007/1/20 77 0
求能够得出这样结果的SQL查询,谢谢各位高手了!!
------解决方案--------------------
先用两个子查询查出第一次和最后一次的记录
然后在连接起来
[解决办法]
Create Table tb(学号 Varchar(10), 姓名 Nvarchar(10), 次数 Int, 成绩 Int, 日期 Varchar(10))
Insert Into tb Select '940001 ', N '王平 ', 1, 60, '2006/5/7 '
Union All Select '940001 ', N '王平 ', 2, 70, '2006/6/10 '
Union All Select '940001 ', N '王平 ', 3, 80, '2006/9/22 '
Union All Select '940001 ', N '王平 ', 4, 90, '2006/10/15 '
Union All Select '940002 ', N '张三 ', 1, 61, '2006/11/2 '
Union All Select '940002 ', N '张三 ', 2, 76, '2006/12/10 '
Union All Select '940002 ', N '张三 ', 3, 82, '2007/1/22 '
Union All Select '940002 ', N '张三 ', 4, 92, '2007/3/1 '
Union All Select '940003 ', N '刘威 ', 1, 82, '2007/1/20 '
Union All Select '940003 ', N '刘威 ', 2, 82, '2007/3/12 '
Union All Select '940004 ', N '赵亮 ', 1, 77, '2007/1/20 '
GO
Select
*, (最后一次考试分数 - 第一次考试分数) As 增长
From
(
Select
TOp 100 Percent
A.姓名,
Max(Case A.次数 When 1 Then 日期 End) As 第一次考试时间,
Max(Case A.次数 When 1 Then 成绩 End) As 第一次考试分数,
Max(Case A.次数 When B.次数 Then 日期 End) As 最后一次考试时间,
Max(Case A.次数 When B.次数 Then 成绩 End) As 最后一次考试分数
From
tb A
Inner Join
(Select 学号, Max(次数) As 次数 From tb Group By 学号) B
On A.学号 = B.学号
Group By A.学号, A.姓名
Order By A.学号
) C
GO
Drop Table tb
--Result
/*
姓名第一次考试时间第一次考试分数最后一次考试时间最后一次考试分数增长
王平2006/5/7602006/10/159030
张三2006/11/2612007/3/19231
刘威2007/1/20822007/3/12820
赵亮2007/1/20772007/1/20770
*/