SQL-与所有其他列一起获得最大值?

时间:2013-09-29 20:47:59

标签: sql-server

我有一张桌子,可以看作是对几个课堂测试中的两门课程的评价,如下:

student_ID     Evaluation           Course1   Course2
------------------------------------------------------
1                   5                 88         93
2                   4                 70         87
1                   5                 93         90
2                   5                 99         91
3                   3                 65         60
3                   4                 88         70

我需要为每个学生获得评估结果= 5(如果有的话)。如果该学生有多个评估= 5,则查询仅显示其中任何一个。因此,对于上面的示例表,查询结果将是

student_ID     Evaluation           Course1   Course2
------------------------------------------------------
1                   5                 88         93
2                   5                 99         91

当然,在我的真实表中,“课程”数量超过2个。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

由于您只希望每student_id只获得一条记录,因此您可以使用生成序号的ROW_NUMBER()。生成的数字始终以1开头,您可以使用Student_ID过滤每个分区的行,在本例中为SELECT Student_ID, Evaluation, Course1, Course2 FROM ( SELECT Student_ID, Evaluation, Course1, Course2, ROW_NUMBER() OVER (PARTITION BY Student_ID ORDER BY Student_ID) rn FROM TableName WHERE Evaluation = 5 ) a WHERE a.rn = 1

{{1}}