我正在使用informix数据库,我想要一个查询,你也可以在查询中生成一个行号
像
select row_number(),firstName,lastName
from students;
row_number() firstName lastName
1 john mathew
2 ricky pointing
3 sachin tendulkar
这里firstName,lastName来自Database,其中在查询中生成行号。
答案 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 排序的方式在系统中输入记录。