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(与 SERIAL 相反,SERIAL 在插入行时生成唯一编号)。

于 2008-09-24T01:00:14.590 回答
2

给定一个名为 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;
于 2008-10-07T01:11:43.330 回答
1

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

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

PS这是专家交流的公认答案。

于 2008-09-23T12:46:49.297 回答
1

选择 sum(1) over (order by rowid) as row_number, M.* from systables M

于 2018-10-05T19:30:32.707 回答
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 数据库,其他实现可能需要一些调整。

于 2018-08-02T20:04:26.393 回答
0

使用 OLAP 表达式,你需要 OVER() 里面有一些东西,因为你不希望分区包含 SORT 子句,如下所示:

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

来自学生;

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

于 2021-04-30T10:30:01.837 回答