2016-08-13 70 views
2

我試圖用這個查詢通過他們的評價我如何獲得SQL中特定行的排名?

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

讓每個vendr的行列,但我希望得到一個特定供應商的排名,所以我把where子句是這樣的:

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)ranking from vendors)v WHERE vendorid = 1' – patriza16

+0

@ patriza16: CTE Thing會工作,用你的餐桌替換供應商 – TheGameiswar