是否跳过SQL Server 2005中的第一行?
我们可以从SQL Server中选择是否跳过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
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中执行时没有更正,但忘了在这里提及它。:-)我在另一个子查询中使用了它,效果非常好!另一个;使用
。。。在这种情况下,解决方案不起作用。