我有一张桌子:
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。
答案 0 :(得分:0)
您可以使用cte ROW_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
答案 1 :(得分:-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