跳过SQL Server 2005的第一行?

Abh*_*jan 7 sql t-sql sql-server sql-server-2005

我们可以从SQL Server中选择Top 10Select Top 'N'排序.

但有没有办法从顶部的结果中跳过第一行?

我的意思是我得到了结果select top 5,然后我跳过第一行并且只得到接下来的4行?

Chr*_*ver 10

您可以使用OVER子句和排名功能.您无法直接对此进行过滤,因此您需要使用子查询或公用表表达式,下面的示例使用后者.

DECLARE @MyTable TABLE 
(
    ID INT,
    Name VARCHAR(15)
)
INSERT INTO @MyTable VALUES (1, 'Alice')
INSERT INTO @MyTable VALUES (2, 'Bob')
INSERT INTO @MyTable VALUES (3, 'Chris')
INSERT INTO @MyTable VALUES (4, 'David')
INSERT INTO @MyTable VALUES (5, 'Edgar')

;WITH people AS 
(
    SELECT ID, Name, ROW_NUMBER() OVER (ORDER BY ID) RN
    FROM @MyTable
)
SELECT ID, Name
FROM people 
WHERE RN > 1
Run Code Online (Sandbox Code Playgroud)

在下一版本的SQL Server(代号Denali)中使用OFFSETFETCH关键字将更好地支持分页.


Sas*_*cha 5

你可以这样做:

SELECT
    *
FROM (
        SELECT      
            row_number() OVER (ORDER BY ID DESC) AS [rownum],
            *
        FROM
            tbl
) T
WHERE 
    rownum BETWEEN (2) AND (5)
Run Code Online (Sandbox Code Playgroud)

更新:

已更新以获取您的值.

更新2:

修正了缺少子查询的错误.感谢Chris Diver指出这一点.

  • 没有子查询就无法过滤,这不起作用. (3认同)