Выберите первые 150 строк, затем следующие 150 и так далее? - PullRequest
5 голосов
/ 09 марта 2012

Как я могу выбрать в оракуле sql в таблице первые x строк, затем следующие x и так далее?Я знаю, что могу использовать TOP / LIMIT, тогда я получу первые x

select a from b limit 150 => получу первые 150 строк.

Редактировать: Почему?Я хотел бы скопировать первые 150 выходов в файл, затем следующие 150 в другой файл и так далее ...

Ответы [ 6 ]

10 голосов
/ 09 марта 2012

LIMIT 150 или LIMIT 0,150: первые 150 строк

LIMIT 150,150: следующие 150 строк

LIMIT 300,150: следующие 150 строк

и т. Д.

9 голосов
/ 09 марта 2012

В Oracle у вас есть хороший rownum: это псевдостолбец. Он нумерует записи в наборе результатов. Первая запись, которая соответствует критериям where в операторе выбора, получает rownum=1, а каждая последующая запись, соответствующая тем же критериям, увеличивается rownum.

SELECT 
    a, b
FROM
    (SELECT rownum rn, a, b from table WHERE c=some_value ORDER BY some_column)
WHERE 
    rn BETWEEN 150 AND 300;

(спасибо @Mark Bannister)

Если вы встраиваете предложение ORDER BY в подзапрос и помещаете условие ROWNUM в запрос верхнего уровня, то вы можете принудительно применить условие ROWNUM после упорядочения строк.

3 голосов
/ 09 марта 2012

Я предполагаю, что вы пытаетесь сделать нумерацию страниц, если это так, вы можете сделать это так:

Пусть pageSize будет 150

SELECT * FROM
(
    SELECT a.*, rownum r__
    FROM
    (
        SELECT * FROM tblName c
    ) a
    WHERE rownum < ((pageNumber * pageSize) + 1 )
)
WHERE r__ >= (((pageNumber-1) * pageSize) + 1)
0 голосов
/ 09 ноября 2017

Начиная с Oracle 12, у вас есть FETCH и OFFSET.

Для вашего примера, где вы хотите поместить 150 строк в один файл и следующие 150 строк в другой файл:

Spool file1.txt
select a from b
order by a
Fetch first 150 rows only;
Spool off
Spool file2.txt
select a from b
offset 150 rows
Fetch next 150 rows only;
spool off

Эта ссылка показывает диаграмму железнодорожного пути из условия ограничения строк из документации Oracle 12.2.

Примеры здесь также включают в себя «order by», что имеет большой смысл, если вы ищете ТОП чего-либо.

В предыдущих версиях Oracle требовалось использовать rownum и order-by, как описано в других ответах здесь.

0 голосов
/ 01 августа 2017

Решение для SQL Server: 1) Получить общее количество строк в моей таблице.

Например, выберите количество (1) из MYTABLE - 500 строк

2) Используйте CTE для назначения логического номера строки для каждой строки в моей таблице.

3) Выберите количество строк, используя интервал номеров строк и предложение BETWEEN.

с CTE AS (ВЫБРАТЬ ROW_NUMBER () OVER (порядок по MyColumn1, MyColumn2, MyColumn3) AS Row #, т. * ОТ МИТАБИЛА т )

выберите * из CTE, где строка № между 150 и 300 Упорядочить по MyColumn1, MyColumn2, MyColumn3

4) Повторите шаги 2) и 3), используя следующий интервал номеров строк, пока не будет достигнуто общее количество строк.

0 голосов
/ 22 января 2017
  1. Сначала получите идентификатор последнего элемента из ваших верхних строк выбора следующим образом:

(a) SQL-запрос следующим образом:

Select top 1 id from (SELECT TOP 150 * FROM (select top 150 * from outlet order by id asc)as d order by id desc) as b order by id asc

Сохранить выбранный идентификатор в объекте сеанса ViewState, а именно LastOutletID

Объявить int PageSize = 150, а также добавить в объект сеанса ViewState

(b) SqlQuery as Follow:

Выберите верхнюю 150 * из (ВЫБЕРИТЕ ТОП 150 * ОТdesc) as b по id asc

Теперь, если вы хотите выбрать следующие верхние строки, выполните шаг 1, чтобы получить последний идентификатор элемента и сохранить его, а затем просто добавить 150 к PageSize, и вы получите следующие 151–300 строк
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...