SQL Server OFFSET эквивалент - PullRequest
8 голосов
/ 10 июля 2010

Я использую SQL Server 2008 Enterprise на Windows Server 2008. Я хочу выбрать результат из топ-11 в топ-20 (например, меня интересует только результат с 11-го по 20-й).Есть идеи, как эффективно написать этот запрос в tsql?

заранее спасибо, Джордж

Ответы [ 3 ]

17 голосов
/ 10 июля 2010

К сожалению, SQL Server не предлагает ничего похожего на синтаксис MySQL OFFSET. Однако вы можете попробовать использовать производную таблицу следующим образом:

SELECT some_field
FROM   (
          SELECT some_field, ROW_NUMBER() OVER (ORDER BY some_id) AS rownum
          FROM   table
       ) AS t
WHERE  t.rownum BETWEEN 11 AND 20
5 голосов
/ 13 февраля 2012

См. Следующее решение применимо только для SQL Server 2012 и более поздних версий.

Предел со смещением на сервере SQL:

SELECT email FROM myTable
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;

// смещение - нет.пропущенных строк

// следующий - обязательно номерследующих строк

2 голосов
/ 10 июля 2010

Предполагая поле сортировки PK,

select top 10 * from MyTable
where PK not in (select top 10 PK from Mytable order by PK)
order by PK

Редактировать: вот вариант

select top 10 * from 
(select top 20 * from MyTable order by PK) as MySelection
order by PK desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...