-1

我有一张桌子:

create table marks(stdName nvarchar(30), marks float)
insert into marks
select 'std1', 98
union all select 'std2', 96
union all select 'std3', 95
union all select 'std4', 97
union all select 'std5', 93

我想创建存储过程来选择第n个最高标记的行作为给定的输入参数。假设如果输入参数是3,它应该显示'std2',96或者如果输入参数是5,它应该显示'std5',93 .

4

2 回答 2

0

您可以使用带有功能的cteROW_NUMBER

WITH cte AS(
    SELECT  stdName
    ,       marks
    ,       ROW_NUMBER()OVER(ORDER BY marks DESC)As MarkRank
    from marks
)
SELECT stdName, marks
FROM cte
WHERE MarkRank = @rank
于 2012-05-18T00:44:28.987 回答
-1

我已经解决了这个问题。感谢蒂姆的帮助。我对存储过程有点困惑。

create procedure showmarks
(@rank int)
as
    begin

WITH cte AS(
    SELECT  stdName
    ,       marks
    ,       ROW_NUMBER()OVER(ORDER BY marks DESC)As MarkRank
    from marks
)
SELECT stdName, marks
FROM cte
WHERE MarkRank = @rank
end
于 2012-05-18T08:23:07.527 回答