Я использую SQL Server 2008. У меня есть таблица Student, в которой есть следующие поля: 1. StudentId, 2. StudentName, 3. Marks. Я хочу получить набор результатов, в котором должен быть столбец с именем «Позиция». Что-то вроде «Select StudentId, StudentName, Marks, as Position from Student ...», так что, в зависимости от отмеченных студентом баллов, я могу оценить их как 1, 2 или 20 позицию. Если ученики имеют одинаковые знаки, то они имеют одинаковую позицию. Спасибо. RhysSQL Server: позиция на основе меток
ответ
Использование RANK:
Если два или более рядов связать для ранга, каждые привязанные строки получают одинаковый ранг. Например, если у двух топ-менеджеров есть одинаковое значение SalesYTD, они оба ранжируются. Продавца со следующим самым высоким SalesYTD занимает третье место, потому что есть две строки, которые ранжируются выше. Поэтому функция RANK не всегда возвращает последовательные целые числа.
Запрос может выглядеть следующим образом:
SELECT
StudentId,
StudentName,
Marks,
RANK() OVER (ORDER BY Marks DESC) AS Position
FROM Student
Вы можете использовать подзапрос для вычисления местоположения. Положение просто еще один, чем число студентов с более высокой отметкой:
select
s.StudentId, s.StudentName, s.Marks,
Position = 1 + (select count(*) from Students m where m.Marks > s.Marks)
from
Students s
Спасибо за простой быстрый ответ. Он сделал это для меня. Я также понял, что функция DENSE_RANK(), предложенная Марк Байерсом, тоже делает трюк. :-) – Rhys
- 1. позиция Обновление на основе идентификатора
- 2. SQL: объединение последовательных событий на основе временных меток
- 3. Переупорядочение строк на основе позиции SQL Server
- 4. SQL Server: позиция SUBSTRING - отрицательное значение
- 5. Позиция HTML div на основе информации JSON
- 6. SQL-запрос для расчета временных интервалов на основе временных меток
- 7. mysql рассчитывается на основе временных меток?
- 8. SQL Server на основе значения записи
- 9. SQL Server ROUND на основе десятичных значений
- 10. SQL Server select на основе определенного условия
- 11. SQL Server на основе последующих записей
- 12. Содержимое копии SQL Server на основе ID
- 13. Ошибка SQL Server на основе другой таблицы?
- 14. Подсчет на основе условия в SQL Server
- 15. SQL Server Выберите столбец на основе запроса
- 16. SQL Server Новые колонки на основе конкатенации
- 17. Аутентификация на основе сертификатов в SQL Server
- 18. SQL Server - данные UPDATE на основе SELECT
- 19. SQL Server - процент на основе полнотекстового поиска
- 20. Удалить на основе группы в SQL Server
- 21. Sql Server - Выполнение итогов на основе условий
- 22. Нестандартная гистограмма на основе даты SQL Server
- 23. MS Sql Server на основе авторизации пользователя
- 24. Проверка даты SQL Server на основе ввода
- 25. Проверка на основе меток на вершине
- 26. Как отсортировать список меток на основе текста меток? JavaFX
- 27. Безопасный выбор на основе меток в DataFrame
- 28. Выполнение подсчетов на основе временных меток
- 29. Обновление текста меток на основе ячейки textLabel
- 30. Назначение меток в R на основе ID?
Вот документации MSDN для ранжирования функций: http://msdn.microsoft.com/en-us/library/ms189798.aspx – David
+1 отлично, я думал ROW_NUMBER(), но RANK() отлично справляется с дублирующими знаками –