我正在使用SQL Server 2008.我有一个Student表,其中有以下字段: 1. StudentId,2。StudentName,3。Marks。 我想得到一个结果集,其中应该有一个名为“Position”的列。像“选择StudentId,StudentName,Marks,作为学生的位置......”这样的东西,根据学生得分的标记,我可以将它们评为第1,第2或第20位。如果学生有相同的分数,那么他们的位置相同。 谢谢。 里斯
答案 0 :(得分:7)
使用RANK:
如果两个或更多行绑定排名,则每个绑定的行都会获得相同的排名。例如,如果两个顶级销售人员具有相同的SalesYTD值,则他们都排名第一。具有次高SalesYTD的销售人员排名第三,因为有两行排名更高。因此,RANK函数并不总是返回连续的整数。
查询可能如下所示:
SELECT
StudentId,
StudentName,
Marks,
RANK() OVER (ORDER BY Marks DESC) AS Position
FROM Student
答案 1 :(得分:1)
您可以使用子查询来计算位置。这个职位只比具有更高分数的学生人数多一个:
select
s.StudentId, s.StudentName, s.Marks,
Position = 1 + (select count(*) from Students m where m.Marks > s.Marks)
from
Students s