试图选择一个范围..例如10-20的顶级结果

时间:2013-08-09 17:49:48

标签: sql sql-server

我已经用Google搜索并搜索了这个网站,似乎没有任何效果,似乎它不喜欢我发现的所有内容的语法..看起来很简单,但它变得令人沮丧。有人可以帮忙吗?希望它使用我创建的topRange和bottomRange变量

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

2 个答案:

答案 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开始。