INFORMATIONIX中查询的行号

时间:2020-03-06 14:34:53  来源:igfitidea点击:

我正在使用informix数据库,我想要一个查询,我们也可以在查询中生成一个行号

喜欢

select row_number(),firstName,lastName 
from students;

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

这里的firstName,lastName来自数据库,其中行号是在查询中生成的。

解决方案

我认为最简单的方法是使用以下代码并相应地调整其返回值。
SELECT rowid,* FROM表

它对我有用,但是请注意它将返回数据库中的行号,而不是查询中的行号。

P.S.这是来自Experts Exchange的公认答案。

我们可能无法在分散在多个DBSpaces中的表中使用ROWID,因此任何使用ROWID的解决方案都不是特别可移植的。强烈建议不要这样做。

如果源表中没有SERIAL列(这是将其作为一般概念实现的更好方法),请查看
CREATE SEQUENCE(创建序列),它或者多或者少与Orrible函数等效,该函数在从中进行选择时生成唯一的数字(与SERIAL相反,当行插入时生成唯一的数字)。

最好的方法是使用(新初始化的)序列。

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

给定一个名为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;