|
|
|
|
Как
пронумеровать выбранные записи в 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
|
|