2008-09-23 2 views
5

Я использую базу данных Informix, я хочу запрос, который вы могли бы также генерировать номер строки вместе с запросомномера строк для запроса в Informix

Как

select row_number(),firstName,lastName 
from students; 

row_number() firstName lastName 
1   john  mathew 
2   ricky  pointing 
3   sachin tendulkar 

Здесь ПгвЬЫате, LastName взяты из База данных, где номер строки генерируется в запросе.

+0

Он вежлив, чтобы выбрать ответ - или, если ничего не отвечая на ваш вопрос, имеет смысл изменить свой вопрос, чтобы он мог Быть понятым. Вы должны стремиться выбрать лучший ответ - пожалуйста. – 2008-10-24 23:35:15

ответ

1

Я думаю, что самый простой способ - использовать следующий код и соответственно отрегулировать его возврат. SELECT rowid, * FROM table

Он работает для меня, но обратите внимание, что он вернет номер строки в базе данных, а не номер строки в запросе.

P.S. это принятый ответ от Experts Exchange.

+1

Невозможно увидеть «принятый ответ» без подписки, который, даже если свободен, по крайней мере является неприятностью. – 2008-10-09 18:07:17

2

Возможно, вы не сможете использовать ROWID в таблице, разбитой на несколько пространств DBS, поэтому любое решение, использующее ROWID, не особенно переносимо. Это также сильно обескураживает.

Если вы не имеете SERIAL столбца в таблице источника (что лучший способ реализации этого в качестве общей концепции), посмотреть на CREATE SEQUENCE, который более или менее эквивалент Orrible функции который генерирует уникальные числа при SELECTed (в отличие от SERIAL, который генерирует уникальный номер, когда строка INSERTED).

+0

примечание: SERIAL в ifx (по крайней мере) 9, 10 и 11 по умолчанию не уникальны. Это будет округлено до 1. – hometoast 2008-10-02 15:20:10

6

Лучший способ - использовать (вновь инициализированную) последовательность.

begin work; 
create sequence myseq; 
select myseq.nextval,s.firstName,s.lastName from students s; 
drop sequence myseq; 
commit work; 
2

Учитывая таблица называется Таблица3 с 3-мя колоннами:

colnum name datatype 
======= ===== === 
1  no  text; 
2  seq number; 
3  nm  text; 

Примечание: сл представляет собой поле в таблице, которая имеет уникальные значения в порядке возрастания. Цифры не обязательно должны быть смежными.

Вот запрос, чтобы вернуть RowNumber (RowNum) вместе с результатом запроса

SELECT table3.no, table3.seq, Table3.nm, 
     (SELECT COUNT(*) FROM Table3 AS Temp 
     WHERE Temp.seq < Table3.seq) + 1 AS RowNum 
    FROM Table3; 
+0

Форматирование оставляет желать лучшего. Чтобы получить материал примера с постоянной шириной, отступы, такие как строка типа «colnum name datatype» с отступом из четырех пробелов. Оставьте текст с отступом меньше. – 2008-10-09 18:05:31

Смежные вопросы