SQL Server:基于标记的位置

时间:2010-05-05 19:38:15

标签: c# .net tsql sql-server-2008

我正在使用SQL Server 2008.我有一个Student表,其中有以下字段: 1. StudentId,2。StudentName,3。Marks。 我想得到一个结果集,其中应该有一个名为“Position”的列。像“选择StudentId,StudentName,Marks,作为学生的位置......”这样的东西,根据学生得分的标记,我可以将它们评为第1,第2或第20位。如果学生有相同的分数,那么他们的位置相同。 谢谢。 里斯

2 个答案:

答案 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