ALTER PROCEDURE [dbo].[getTopFantasyPlayersByPositionSeason]
@top int,
@position varchar(3),
@topRange int,
@bottomRange int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
IF @position = 'QB' OR @position = 'RB' OR @position = 'WR' OR @position = 'TE' OR @position = 'K' OR @position = 'D' OR @position = 'TE'
BEGIN
SELECT TOP (@top) *
FROM nflPassers_season
WHERE position=@position AND points > 0
ORDER BY points DESC
END
END
答案 0 :(得分:1)
ALTER PROCEDURE [dbo].[getTopFantasyPlayersByPositionSeason]
@top INT
, @position VARCHAR(3)
, @topRange INT
, @bottomRange INT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
IF @position IN ( 'QB', 'RB', 'WR', 'TE', 'K', 'D', 'TE' )
BEGIN
;
WITH c AS ( SELECT rn = ROW_NUMBER() OVER ( ORDER BY points DESC)
, firstname
FROM nflPassers_season
WHERE position = @position
AND points > 0
)
SELECT firstname
FROM c
WHERE rn BETWEEN @toprange AND @bottomRange
END
END
答案 1 :(得分:1)
SQL 2007之前的基本分页:
SELECT *
FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY points DESC) AS RowRank
FROM YourTable
)AS sub
WHERE Rowrank BETWEEN @Variable1 AND @Variable2
如果您想要按照某些分组获得一系列结果,例如播放器,则可以将PARTITION BY
添加到ROW_NUMBER()
:
SELECT *
FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY SomeField ORDER BY points DESC) AS RowRank
FROM YourTable
WHERE position = @position
AND points > 0
) AS sub
WHERE Rowrank BETWEEN @Variable1 AND @Variable2
这将使PARTITION BY
子句中每个项目的排名从1开始。