На главную
Подписка
Новости


Рейтинг@Mail.ru











Главная / DELPHI / Часто задаваемые вопросы и ответы на них / Разработка баз данных / Как пронумеровать выбранные записи в SQL запросе, RecNo не работает Сделать домашней страницей Добавить в избранное Написать писмо

Как пронумеровать выбранные записи в SQL запросе, RecNo не работает


Использовать методы SQL сервера. Для каждого сервера, к сожалению, разные в Sybase SQL Anywhere - это number(*).
Например
  select number(*), .... from ....
  В Oracle, боюсь ошибиться, rowid или rownum

Комментарии от Andrey Mamylin

Для ORACLE...

ROWNUM - это псевдоколонка, пронумерованная в порядке следования строк для данного
SELECTа (заполняется до выполнения ORDER BY).
Например, следующий SELECT вернет первые 10 строк для данной сортировки.
SELECT e.ROWNUM,  e.*
FROM    customer e
WHERE    ROWNUM < 11
ORDER BY cust_id;
Однако нумерация будет не 1, 2, 3, 4, а что-то типа 10, 47, 9, 17 - ведь заполняется до
выполнения ORDER BY.

ROWID - это внутренний номер строки в таблице. Однозначно идентифицирует оную.
Можно использовать для корректировки выбранной в Grid строки, а порядок следования -
совершенно произвольный.

С некоторым приближением можно использовать SEQUENCE - создается специальная конструкция,
которая автоматически генерит нумерацию для некоторой вставленной в таблицу колонки
(1,2,3,4... и т.д.) при добавлении новой строки. Если строку удалить - будет "дырка" в
нумерации.
SEQUENCE "привязывается" к таблице триггером и хранит последний сгенерированный номер,
который автоматически обновляется по-мере добавления строк...

Иногда, (не всегда), может прокатить следующее...
select ROWNUM,
A.cust_id
from
(
SELECT cust_id cust_id
FROM customer
WHERE .......
GROUP by cust_id
) A
order by A.cust_id

А вообще - нумерация строк в таблицах противоречит основным принципам реляционности...
ORACLE - это не Fox Pro и ...
Однако, если край нужно - можно сделать ручками на клиенте, используя вышеуказанные
конструкции, а затем выводить в SELECT.

PS. Говорят??? еще есть некий хитрый способ с примененим DISTINCT.

Комментарий от "Petr Abramov":
В Oracle начиная с 8.1.5 кляуза order by возможна в подзапросе, и тогда rownum не перемешиваются. Например:

  select rownum,q.*
  from
    ( select *
      from CUSTOMER
      order by  CUST_ID
    ) q


Комментарий от Кости (kostik78ua@yahoo.com):
Если нужно пронумеровать последовательно строки через ROWNUM, можно воспользоваться запросом в запросе:

  SELECT e.ROWNUM, e.*
  FROM (
  SELECT *
  FROM customer
  ORDER BY cust_id) e
  WHERE e.ROWNUM < 11

Copyright ©   "Мастера DELPHI"   E-mail:   delphi@mastak.com  http://www.delphimaster.ru
Источник получения информации: http://www.delphimaster.ru
Hosted by uCoz