Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否跳过SQL Server 2005中的第一行?_Sql_Sql Server_Sql Server 2005_Tsql - Fatal编程技术网

是否跳过SQL Server 2005中的第一行?

是否跳过SQL Server 2005中的第一行?,sql,sql-server,sql-server-2005,tsql,Sql,Sql Server,Sql Server 2005,Tsql,我们可以从SQL Server中选择Top 10或选择Top'N'行 但是有没有办法从top的结果中跳过第一行 我的意思是,我从选择前5行得到结果,然后跳过第一行,只得到下4行?您要查找的是术语分页。 像这样:你可以这样做: SELECT * FROM ( SELECT row_number() OVER (ORDER BY ID DESC) AS [rownum], * FROM

我们可以从SQL Server中选择
Top 10
选择Top'N'

但是有没有办法从top的结果中跳过第一行


我的意思是,我从
选择前5行得到结果,然后跳过第一行,只得到下4行?

您要查找的是术语分页。
像这样:

你可以这样做:

SELECT
    *
FROM (
        SELECT      
            row_number() OVER (ORDER BY ID DESC) AS [rownum],
            *
        FROM
            tbl
) T
WHERE 
    rownum BETWEEN (2) AND (5)
-- Test table
declare @T table(ID int);

-- Add test data
insert into @T 
select 1 union all
select 2 union all
select 3 union all
select 4 union all
select 5 union all
select 6;

-- Query using row_number() over(...)
-- to get rows 2 - 5
select T.ID
from (
        select *,
               row_number() over(order by ID) as rn
        from @T       
     ) as T
where T.rn between 2 and 5;
更新:

更新以获得您的值

更新2:

已更正缺少子查询的错误。感谢Chris Diver指出这一点。

类似这样的内容:

SELECT
    *
FROM (
        SELECT      
            row_number() OVER (ORDER BY ID DESC) AS [rownum],
            *
        FROM
            tbl
) T
WHERE 
    rownum BETWEEN (2) AND (5)
-- Test table
declare @T table(ID int);

-- Add test data
insert into @T 
select 1 union all
select 2 union all
select 3 union all
select 4 union all
select 5 union all
select 6;

-- Query using row_number() over(...)
-- to get rows 2 - 5
select T.ID
from (
        select *,
               row_number() over(order by ID) as rn
        from @T       
     ) as T
where T.rn between 2 and 5;

您可以使用
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;

在下一版本的SQL Server(代号为Denali)中,使用
OFFSET
FETCH
关键字将更好地支持分页。

太好了……我不这么认为。我试着用前五名来选择,然后我试着用“跳过”这个词来跳过第一个。。。非常感谢…:-)+提到这一点,它是一个排名函数——这使它成为一个更有用的答案。我在sql中执行时没有更正,但忘了在这里提及它。:-)我在另一个子查询中使用了它,效果非常好!另一个
;使用
。。。在这种情况下,解决方案不起作用。