Есть ли эквивалент "START AT" в MS-SQL?
некоторые базы данных поддерживают такие команды, как:
SELECT TOP 10 START AT 10 * FROM <TABLE>
по существу, мне нужно вытащить первые 10 записей, затем следующие 10, затем следующие 10 и т. д. Возможно, есть другой способ сделать это, но в прошлом я делал это, как указано выше, для баз данных, поддерживающих "START AT".
4 ответов
какая версия SQL Server?
в SQL Server 2000 это настоящая боль (хотя возможно использование уродливых трюков, как это опубликовано stingyjack).
в 2005 году и позже это немного проще-посмотрите на функции row_number()
SELECT Top 10 *
FROM Table
WHERE <primary key> Not IN (
SELECT Top 10 <primaryKey>
FROM Table
ORDER BY <primary Key> ASC)
ORDER BY <primary Key> ASC
Если вы хотите быть совместимы с SQL Server 2000, вы можете использовать
SELECT * FROM
(
SELECT TOP 10 FROM
(
SELECT TOP (n * 10) FROM <table> ORDER BY (column) ASC
) AS t1 ORDER BY (column) DESC
) AS t2 ORDER BY (column) ASC
в SQL Server 2005 появилась новая функция Row_Number(). Вы можете использовать его таким образом:
WITH Orders AS
(
SELECT SalesOrderID, OrderDate,
ROW_NUMBER() OVER (order by OrderDate) AS 'RowNumber'
FROM SalesOrder
)
SELECT *
FROM Orders
WHERE RowNumber between 10 and 19;