SQL Server: позиция основана на оценках - PullRequest
3 голосов
/ 05 мая 2010

Я использую SQL Server 2008. У меня есть таблица Student, в которой есть следующие поля: 1. StudentId, 2. StudentName, 3. Оценки. Я хочу получить набор результатов, в котором должен быть столбец с именем «Позиция». Что-то вроде «Выберите StudentId, StudentName, Marks, as Position from Student ...», чтобы в зависимости от оценок, набранных студентом, я мог оценивать их как 1-ю, 2-ю или 20-ю позицию. Если у студентов одинаковые оценки, значит, у них одинаковая позиция. Благодарю. Риз

Ответы [ 2 ]

7 голосов
/ 05 мая 2010

Использование RANK :

Если две или более строки связывают для ранга, каждая связанная строка получает одинаковый ранг. Например, если два главных продавца имеют одинаковое значение SalesYTD, они оба ранжируются на одно. Продавец со следующим самым высоким SalesYTD занимает третье место, потому что есть две строки, которые ранжируются выше. Следовательно, функция RANK не всегда возвращает последовательные целые числа.

Запрос может выглядеть так:

SELECT
    StudentId,
    StudentName,
    Marks,
    RANK() OVER (ORDER BY Marks DESC) AS Position
FROM Student
1 голос
/ 05 мая 2010

Вы можете использовать подзапрос для расчета позиции.Позиция просто на один больше, чем количество студентов с более высокой оценкой:

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