嗨我试图通过使用得分获得比赛的前十名获奖者。问题是,当有两个用户相同的分数,例如我只得到前9名有效(应该是11个记录返回,如果有两个前3名得分,其余的都是唯一的例子)...MSSQL选择前10名,但包括重复值的列
我不知道如何解决这个问题,并希望得到一些指导。
由于事先
伊恩
嗨我试图通过使用得分获得比赛的前十名获奖者。问题是,当有两个用户相同的分数,例如我只得到前9名有效(应该是11个记录返回,如果有两个前3名得分,其余的都是唯一的例子)...MSSQL选择前10名,但包括重复值的列
我不知道如何解决这个问题,并希望得到一些指导。
由于事先
伊恩
应一一记录返回如果有两个前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
顶端语法允许的关系
[
TOP (expression) [PERCENT]
[ WITH TIES ]
]
你尝试了吗?
你想这样做:
SELECT TOP(10) WITH TIES
FirstName, LastName, score
FROM winners
ORDER BY score;
欲了解更多信息,请参阅TOP (Transact-SQL)
@Mikeal事实上,重读问题denserank可能是我们所需要的 – buckley
大,作品一种享受!谢谢。每天学习新的东西...抱歉,延迟响应,它只是得到了我需要实现这一点。我不想推动我的运气,但有没有办法在前10名中至少包含一个类别,即如果有3个类别,并且所有前十名都来自类别1,我需要推倒前两名从这个类别中,然后将第2和第3类的前1个分数添加到结果中?或者我需要通过代码来做到这一点(使用C#) – Ianc22
@ lanc22我想这是可能的,但我不完全明白你想要做什么。你应该问这是一个新问题。在你的新问题中,你应该包括一些样本数据,你现在使用的查询(这个dense_rank查询)以及你使用样本数据查找的输出。 –