Номера строк для запроса в informix - PullRequest
5 голосов
/ 23 сентября 2008

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

Как

select row_number(),firstName,lastName 
from students;

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

Здесь firstName, lastName взяты из базы данных, где в запросе генерируется номер строки.

Ответы [ 6 ]

8 голосов
/ 02 октября 2008

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

begin work;
create sequence myseq;
select myseq.nextval,s.firstName,s.lastName from students s;
drop sequence myseq;
commit work;
2 голосов
/ 07 октября 2008

Учитывая таблицу с именем Table3 с 3 столбцами:

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

Примечание: seq - это поле в таблице, которое имеет уникальные значения в порядке возрастания. Числа не должны быть смежными.

Вот запрос для возврата числа (RowNum) вместе с результатом запроса

SELECT table3.no, table3.seq, Table3.nm,
      (SELECT COUNT(*) FROM Table3 AS Temp
         WHERE Temp.seq < Table3.seq) + 1 AS RowNum
    FROM Table3;
2 голосов
/ 24 сентября 2008

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

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

1 голос
/ 23 сентября 2008

Я думаю, что самый простой способ - использовать следующий код и соответствующим образом настроить его возвращение. ВЫБЕРИТЕ rowid, * ИЗ таблицы

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

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

0 голосов
/ 05 октября 2018

выберите сумму (1) более (порядок по rowid) как row_number, M. * из системных таблиц M

0 голосов
/ 02 августа 2018

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

1 - Вам нужно создать ФУНКЦИЮ, которая возвращает числа в заданном диапазоне:

CREATE FUNCTION fnc_numbers_in_range (pMinNumber INT, pMaxNumber INT)
RETURNING INT as NUMERO;
DEFINE numero INT;
LET numero = 0;
FOR numero = pMinNumber TO pMaxNumber   
    RETURN numero WITH RESUME;  
END FOR;    
END FUNCTION; 

2 - Результаты этой функции скрещиваются с нужной таблицей:

SELECT * FROM TABLE (fnc_numbers_in_range(0,10000)), my_table;

Единственное, что вы должны заранее знать, сколько строк вы хотите, вы можете получить это с помощью функции COUNT (*).

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

...