2012-06-07 44 views
0

嗨我試圖通過使用得分獲得比賽的前十名獲獎者。問題是,當有兩個用戶相同的分數,例如我只得到前9名有效(應該是11個記錄返回,如果有兩個前3名得分,其餘的都是唯一的例子)...MSSQL選擇前10名,但包括重複值的列

我不知道如何解決這個問題,並希望得到一些指導。

由於事先

伊恩

回答

3

應一一記錄返回如果有兩個前3分

聽起來像你想要的使用dense_rank

這將爲您提供排名前10位的所有行。

select T.Score 
from (
     select Score, 
       dense_rank() over(order by Score) as rn 
     from YourTable 
    ) T 
where T.rn <= 10 

SE-Data

+0

@Mikeal事實上,重讀問題denserank可能是我們所需要的 – buckley

+0

大,作品一種享受!謝謝。每天學習新的東西...抱歉,延遲響應,它只是得到了我需要實現這一點。我不想推動我的運氣,但有沒有辦法在前10名中至少包含一個類別,即如果有3個類別,並且所有前十名都來自類別1,我需要推倒前兩名從這個類別中,然後將第2和第3類的前1個分數添加到結果中?或者我需要通過代碼來做到這一點(使用C#) – Ianc22

+0

@ lanc22我想這是可能的,但我不完全明白你想要做什麼。你應該問這是一個新問題。在你的新問題中,你應該包括一些樣本數據,你現在使用的查詢(這個dense_rank查詢)以及你使用樣本數據查找的輸出。 –

0

你想這樣做:

SELECT TOP(10) WITH TIES 
FirstName, LastName, score 
FROM winners 
ORDER BY score; 

欲瞭解更多信息,請參閱TOP (Transact-SQL)