informix中查询的行号

时间:2008-09-23 05:27:39

标签: database informix row-number

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

select row_number(),firstName,lastName 
from students;

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

这里firstName,lastName来自Database,其中在查询中生成行号。

7 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:2)

您可能无法在跨多个DBSpace分段的表中使用ROWID,因此任何使用ROWID的解决方案都不是特别便携。它也非常气馁。

如果您的源表中没有SERIAL列(这是将其作为一般概念实现的更好方法),请查看 CREATE SEQUENCE,或多或少相当于一个可怕的函数,它在SELECTed from时产生唯一的数字(与SERIAL相反,后者在行被插入时生成唯一的数字)。

答案 2 :(得分:2)

给定一个名为Table3的表,其中包含3列:

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

注意: seq是表中具有按升序排列的唯一值的字段。这些数字不一定是连续的。

这是查询以返回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;

答案 3 :(得分:1)

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

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

P.S。这是Experts Exchange的接受答案。

答案 4 :(得分:0)

我知道这是一个古老的问题,但是由于我只是遇到了这个问题并且在这里未提及一个灵魂,所以我很乐意分享,所以这里是:

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数据库,其他实现可能需要进行一些调整。

答案 5 :(得分:0)

从systables M中选择sum(1)作为row_number,M. *(按rowid排序)

答案 6 :(得分:0)

使用 OLAP 表达式时,您需要 OVER() 中包含某些内容,因为您不希望分区包含 SORT 子句,如下所示:

SELECT ROW_NUMBER() OVER(ORDER BY lastName, firstName) AS rn, firstName, lastName 

来自学生;

如果您不想按名称排序,您可以使用按 ROWID 排序的方式在系统中输入记录。