2016-08-13 3 views
2

Я пытался использовать этот запрос, чтобы получить ряды каждого vendr их рейтингКак получить ранг определенной строки в SQL?

SELECT vendorid, rating, RANK() over(ORDER BY rating DESC)ranking 
FROM vendors 

, но я хочу, чтобы получить рейтинг определенного поставщика, поэтому я поставил, где положение так:

SELECT vendorid, rating, RANK() over(ORDER BY rating DESC)ranking 
FROM vendors 
WHERE vendorid=1 

, но он возвращает значение 1 в рейтинге, хотя оно не является ранг 1. как я должен это исправить?

+0

Сделайте запрос ранжирования подзапросом и новым фильтром основного запроса клиентом, иначе вы оцениваете результаты фильтрации. – SMM

ответ

1

В этом случае

SELECT 
    vendorid, rating, 
    RANK() OVER (ORDER BY rating DESC) ranking 
FROM 
    vendors 
WHERE 
    vendorid = 1 

Ранг вычисляется после где, так что после фильтрации, SQL Server будет назначать ряды и показать ранг для любых значений оставил

Как это исправить?

Используйте подзапрос или cte, как показано ниже.

;With cte as 
(
    SELECT 
     vendorid, rating, 
     RANK() OVER (ORDER BY rating DESC) ranking 
    FROM 
     YOURTABLE 
) 
select * 
from cte 
where vendorid = 1 
+0

idk но cte вещь не работала, но спасибо! хотя я нашел это решение: «SELECT v.Vendorid, v.rating, v.ranking FROM (SELECT vendorid, rating, RANK() over (ORDER BY rating DESC) рейтинг FROM поставщиков) v WHERE vendorid = 1 ' – patriza16

+0

@ patriza16: CTE Thing будет работать, замените поставщиков вашей таблицей – TheGameiswar

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