Vb.net学生排名

时间:2016-02-16 22:44:53

标签: sql vb.net sql-server-2012

我需要一些帮助,我正在开展一个学校项目并按照学校规范对学生进行排名。例如,在10名学生中,每个学生的分数分别为80,70,70,60,60,50,40,30,30,20。在SQL Server中使用Rank获取每个学生的排名时,它将输出此

Score   Rank
------------
80      1
70      2
70      3
60      4
60      5
50      6
40      7
30      8
30      9
20      10

我想要的是具有相同分数的学生具有相同的排名。看起来应该是这样的

Score   Rank
------------
80      1
70      2
70      2        
60      4
60      5
50      6
30      7
30      7
30      7
20      10

我正在使用vb.net 2013和Sql server 2012,并且我将数据库中的数据显示到DataGridView。

enter image description here

1 个答案:

答案 0 :(得分:0)

DECLARE @Table TABLE(
    ContenderNum INT,
    totals FLOAT
)

INSERT INTO @Table SELECT 1, 196
INSERT INTO @Table SELECT 2, 181
INSERT INTO @Table SELECT 3, 192
INSERT INTO @Table SELECT 4, 181
INSERT INTO @Table SELECT 5, 179

SELECT contendernum,totals, 
    RANK() OVER (ORDER BY totals DESC) AS xRank,
    DENSE_RANK() OVER (ORDER BY totals DESC) AS xRank
FROM 
( 
    SELECT ContenderNum ,totals 
    FROM @Table
) AS a
ORDER BY 1

它解决了,我使用的是SQL Row_Number