2010-05-05 42 views
3

我正在使用SQL Server 2008.我有一個Student表,其中有以下字段: 1. StudentId,2. StudentName,3.標記。 我想得到一個結果集,其中應該有一個名爲「位置」的列。就像「選擇StudentId,StudentName,Marks,作爲學生的位置...」一樣,根據學生得分的分數,我可以評估他們的第一,第二或第二十位。如果學生有相同的分數,那麼他們有相同的位置。 謝謝。 里斯SQL Server:基於標記的位置

回答

7

使用RANK

如果兩個或更多的行並列的等級,每個並列排接收相同的等級。例如,如果兩位頂級銷售人員具有相同的SalesYTD值,則他們都排名第一。 SalesYTD次高的銷售人員排名第三,因爲有兩排排名較高。因此,RANK函數並不總是返回連續的整數。

查詢看起來是這樣的:

SELECT 
    StudentId, 
    StudentName, 
    Marks, 
    RANK() OVER (ORDER BY Marks DESC) AS Position 
FROM Student 
+1

下面是排名功能的MSDN文檔:http://msdn.microsoft.com/en-us/library/ms189798.aspx – David 2010-05-05 19:44:12

+0

+1完美,我在想ROW_NUMBER(),但RANK()完全處理重複標記 – 2010-05-05 19:45:18

1

您可以使用子查詢來計算位置。位置簡直比學生具有較高的標記數量多一個:

select 
    s.StudentId, s.StudentName, s.Marks, 
    Position = 1 + (select count(*) from Students m where m.Marks > s.Marks) 
from 
    Students s 
+0

感謝您的簡單快速回答。它已經爲我做了。我也意識到由Mark Byers建議的DENSE_RANK()函數也可以做到這一點。 :-) – Rhys 2010-05-06 05:53:08