我有一张桌子,可以看作是对几个课堂测试中的两门课程的评价,如下:
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个。
感谢您的帮助。
答案 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}}