Пропустить первую строку в SQL Server 2005? - PullRequest
7 голосов
/ 21 августа 2011

Мы можем выбрать Top 10 или Select Top 'N' строку из SQL Server.

Но есть ли способ пропустить первую строку из результата top ??

Я имею в виду, я получаю результат от select top 5, затем я пропускаю первый ряд и получаю только следующие 4 строки?

Ответы [ 4 ]

10 голосов
/ 21 августа 2011

Вы можете использовать предложение 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.

5 голосов
/ 21 августа 2011

Вы можете сделать что-то вроде этого:

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

Обновление:

Обновлено, чтобы иметь ваши значения.

Обновление 2:

Исправлена ​​ошибка с отсутствующим подзапросом.Спасибо Крису Дайверу, который указал на это.

2 голосов
/ 21 августа 2011

Примерно так:

-- 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 голосов
/ 21 августа 2011

То, что вы ищете, это термин пейджинг.Как это: http://www.15seconds.com/issue/070628.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...