2012-06-07 45 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)