2014-11-20 3 views
0

У меня есть набор данных, в котором мне нужно ранжировать строки по столбцу оценки. Очевидный ответ заключается в использовании ROW_NUMBER():SQL-запрос для ранжирования позиций

select ID, Name, Score, ROW_NUMBER() over (order by Score desc) as Rank 
from MyTable 
order by Score desc 

но есть улов. Если две записи имеют одинаковый балл, то они должны иметь одинаковый ранг, а запись, которая приходит после них, должна пропустить назад, чтобы отразить их естественный порядок, например.

ID  Name  Score  Rank 
---  ----  -----  ----  
13  Fred  47   1 
77  Bob   36   2 
88  Harry  36   2 
10  John  23   4 

Каков наилучший способ для этого?

+0

Использовать ранг или DENSE_RANK –

ответ

1

Try This

выберите ID, Имя, Score, RANK() по (PARTITION BY Score ORDER BY DESC Score) в ранг из MyTable

+0

Ну ... это было просто , Спасибо, добро пожаловать в Stackoverflow, Dhaval! –

+0

Для будущих поисковых роботов см. [RANK()] (http://msdn.microsoft.com/en-us/library/ms176102.aspx) на MSDN –

+0

Кстати, не «Partition by Score»; который сбросит ряды для каждого нового балла. –

Смежные вопросы