@ Espo спасибо за проверку реальности - добавлен дополнительный выбор, чтобы исправить это.
Я думаю, что самый простой ответ:
select userid, points from users
where points in (select distinct top N points from users order by points desc)
Если вы хотите поместить это в хранимый процесс, который принимает N в качестве параметра, то вам нужно либо прочитать SQL в переменную, затем выполнить его, либо выполнить трюк с подсчетом строк:
declare @SQL nvarchar(2000)
set @SQL = "select userID, points from users "
set @SQL = @SQL + " where points in (select distinct top " + @N
set @SQL = @SQL + " points from users order by points desc)"
execute @SQL
или
SELECT UserID, Points
FROM (SELECT ROW_NUMBER() OVER (ORDER BY points DESC)
AS Row, UserID, Points FROM Users)
AS usersWithPoints
WHERE Row between 0 and @N
Оба примера предполагают использование SQL Server и не были протестированы.