Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Постраничный вывод с сортировкой. / 6 сообщений из 6, страница 1 из 1
03.06.2003, 11:56:15
    #32174933
Paul Chabinsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод с сортировкой.
Ребят, посоветуйте плиз как в Оракле 8.0.5 сделать выборку постраничную с сортировкой по опредленному полю.
В подзапросах ORDER BY делать нельзя, rownum при сортировки по какомунибудь полю идет не в отсортированном виде...

Заранее спасибо.
...
Рейтинг: 0 / 0
03.06.2003, 11:59:03
    #32174937
AndrewS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод с сортировкой.
Используй rownum после сортировки
Код: plaintext
1.
2.
select rownum, t.* from (
select * from scott.emp order by ename
)
...
Рейтинг: 0 / 0
03.06.2003, 12:11:02
    #32174958
Paul Chabinsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод с сортировкой.
Ну я же говорю у меня Oracle 8.0.5 нельзя использовать в подзапросе - ORDER BY
...
Рейтинг: 0 / 0
03.06.2003, 12:45:13
    #32175001
MaxU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод с сортировкой.
"фетчить" клиентом?

ИМХО для 8.0 не существует красивого SQL решения, но буду рад если я ошибаюсь...
;)
...
Рейтинг: 0 / 0
03.06.2003, 17:20:34
    #32175496
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод с сортировкой.
There is a solution, and obviously it is not pretty:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select  t.*,
        t.rowid
  from  tbl t
  where col > 'last-col-value-from-the-previous-page'
     or (
             col = 'last-col-value-from-the-previous-page'
         and
             rowid > 'last-rowid-value-from-the-previous-page-or-zero-for-the-first-page'
        )
  order by col
/


Assume we want to order emp by job:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
SQL> select  t.*,
   2           t.rowid
   3     from  emp t
   4     order by job
   5   /

EMPNO ENAME      JOB         MGR HIREDATE    SAL  COMM  DEPTNO ROWID
 ----- ---------- --------- ----- --------- ----- ----- ------- ------------------
 
  7788  SCOTT      ANALYST     7566   19 -APR- 87    3000              20  AAAHW7AABAAAMUiAAH
  7902  FORD       ANALYST     7566   03 -DEC- 81    3000              20  AAAHW7AABAAAMUiAAM
  7369  SMITH      CLERK       7902   17 -DEC- 80     800              20  AAAHW7AABAAAMUiAAA
  7876  ADAMS      CLERK       7788   23 -MAY- 87    1100              20  AAAHW7AABAAAMUiAAK
  7934  MILLER     CLERK       7782   23 -JAN- 82    1300              10  AAAHW7AABAAAMUiAAN
  7900  JAMES      CLERK       7698   03 -DEC- 81     950              30  AAAHW7AABAAAMUiAAL
  7566  JONES      MANAGER     7839   02 -APR- 81    2975              20  AAAHW7AABAAAMUiAAD
  7782  CLARK      MANAGER     7839   09 -JUN- 81    2450              10  AAAHW7AABAAAMUiAAG
  7698  BLAKE      MANAGER     7839   01 -MAY- 81    2850              30  AAAHW7AABAAAMUiAAF
  7839  KING       PRESIDENT        17 -NOV- 81    5000              10  AAAHW7AABAAAMUiAAI
  7499  ALLEN      SALESMAN    7698   20 -FEB- 81    1600     300        30  AAAHW7AABAAAMUiAAB

EMPNO ENAME      JOB         MGR HIREDATE    SAL  COMM  DEPTNO ROWID
 ----- ---------- --------- ----- --------- ----- ----- ------- ------------------
 
  7654  MARTIN     SALESMAN    7698   28 -SEP- 81    1250    1400        30  AAAHW7AABAAAMUiAAE
  7844  TURNER     SALESMAN    7698   08 -SEP- 81    1500       0        30  AAAHW7AABAAAMUiAAJ
  7521  WARD       SALESMAN    7698   22 -FEB- 81    1250     500        30  AAAHW7AABAAAMUiAAC


and page size is 3, so CLERK is split between two pages. Since JOB is a string we pick space (could be ASCII(0)) as initial value:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select  t.*,
        t.rowid
  from  emp t
  where job > ' '
     or (
             job = ' '
         and
             rowid > '0'
        )
  order by job
/


First 3 rows fetched by the above query are:

Код: plaintext
1.
2.
3.
4.
5.
EMPNO ENAME      JOB         MGR HIREDATE    SAL  COMM  DEPTNO ROWID
 ----- ---------- --------- ----- --------- ----- ----- ------- ------------------
 
  7788  SCOTT      ANALYST     7566   19 -APR- 87    3000              20  AAAHW7AABAAAMUiAAH
  7902  FORD       ANALYST     7566   03 -DEC- 81    3000              20  AAAHW7AABAAAMUiAAM
  7369  SMITH      CLERK       7902   17 -DEC- 80     800              20  AAAHW7AABAAAMUiAAA


Therefore, to get second page we issue:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select  t.*,
        t.rowid
  from  emp t
  where job > 'CLERK'
     or (
             job = 'CLERK'
         and
             rowid > 'AAAHW7AABAAAMUiAAA'
        )
  order by job
/


First 3 rows fetched by the above query are:

Код: plaintext
1.
2.
3.
4.
5.
EMPNO ENAME      JOB         MGR HIREDATE    SAL  COMM  DEPTNO ROWID
 ----- ---------- --------- ----- --------- ----- ----- ------- ------------------
 
  7876  ADAMS      CLERK       7788   23 -MAY- 87    1100              20  AAAHW7AABAAAMUiAAK
  7900  JAMES      CLERK       7698   03 -DEC- 81     950              30  AAAHW7AABAAAMUiAAL
  7934  MILLER     CLERK       7782   23 -JAN- 82    1300              10  AAAHW7AABAAAMUiAAN


SY
...
Рейтинг: 0 / 0
03.06.2003, 19:50:13
    #32175656
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод с сортировкой.
Ooops, I forgot to add rowid to ORDER BY. It should be ORDER BY col,rowid.

SY
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Постраничный вывод с сортировкой. / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]