2014-09-20 4 views
-1

Я использую SQL Server 2008. С помощью TOP пункта в SQL Server я запустить следующий запрос, чтобы отобразить первые 1000 строк из моего отдела таблицыSQL Server 2008 - Как показывают строки между 1001 до 2000

Select TOP 1000 * 
from Department; 

Теперь мне нужно отобразить следующие 1000 данных из одной таблицы. Может ли кто-нибудь помочь мне найти решение для этого?

+5

Прежде всего, 'TOP' * без *' ORDER BY' бессмысленны - что вы заказываете, чтобы получить «топ-1000» строк ??? Вам нужно решить, какой столбец для заказа - **, затем ** (и только после этого) делает «TOP» в некотором смысле –

ответ

1

вы можете попробовать что-то вроде:

SELECT * 
FROM (
      SELECT *, ROW_NUMBER() OVER (ORDER BY DEPARTMENT_NAME) AS rownum 
      FROM DEPARTMENT 
     ) AS t 
WHERE t.rownum BETWEEN 1001 AND 2001 
+1

Это метод, который использовался в SQL Server 2000 до добавления row_number ... – Sandr

3

Вы можете использовать функцию row_number, чтобы получить номер строки, а затем взять число от X к Y. Ниже запрос при условии, что вы хотите, чтобы результаты по заказу ID:

WITH OrderedDepartments AS 
(
    SELECT ID, Name, 
    ROW_NUMBER() OVER (ORDER BY ID) AS RowNumber 
    FROM Department 
) 
SELECT ID, Name 
FROM OrderedDepartments 
WHERE RowNumber BETWEEN 1001 AND 2000; 
+0

If вы хотите, чтобы данные были перечислены в определенном порядке, вам нужно добавить этот заказ в свой запрос. В указанном запросе это было добавлено в условии вычисления row_number (* 'order by ID' *). Функция Row_number не может работать без нее. И в вашем запросе нет гарантии, что вы не получите одну и ту же строку дважды в разных подмножествах. – Sandr

-1

Лучший способ заключается в использовании "FETCH (Transact-SQL)", больше информации и примеры доступны в следующей ссылке,

FETCH (Transact-SQL)

+1

Опция FETCH применима только для курсоров. – Sandr

+0

Опция FETCH не применима в этом случае, поскольку она применима только к курсорам. –

Смежные вопросы