5

私はinformixデータベースを使用していますが、クエリと一緒に行番号を生成できるクエリが必要です

好き

select row_number(),firstName,lastName 
from students;

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

ここで、firstName、lastNameはデータベースからのものであり、行番号はクエリで生成されます。

4

7 に答える 7

9

最善の方法は、(新しく初期化された) シーケンスを使用することです。

begin work;
create sequence myseq;
select myseq.nextval,s.firstName,s.lastName from students s;
drop sequence myseq;
commit work;
于 2008-10-02T15:27:55.427 に答える
2

複数のDBSpace間でフラグメント化されたテーブルでROWIDを使用できない場合があるため、ROWIDを使用するソリューションは特に移植性がありません。また、強くお勧めしません。

ソーステーブルにSERIAL列がない場合(これは一般的な概念としてこれを実装するためのより良い方法です)、 CREATE SEQUENCEを見てください。これは、一意の数値を生成するOrrible関数とほぼ同等です。 SELECTED fromから(行がINSERTされたときに一意の番号を生成するSERIALとは対照的に)。

于 2008-09-24T01:00:14.590 に答える
2

3 つの列を持つ Table3 というテーブルがあるとします。

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;
于 2008-10-07T01:11:43.330 に答える
1

最も簡単な方法は、次のコードを使用して、それに応じて戻り値を調整することだと思います。SELECT 行 ID、* FROM テーブル

それは私にとってはうまくいきますが、クエリの行番号ではなく、データベースの行番号を返すことに注意してください。

PSそれはExperts Exchangeからの受け入れられた回答です。

于 2008-09-23T12:46:49.297 に答える