Oracle ROWNUM伪列
我有一个包含GROUPBY和ORDERBY子句的复杂查询,我需要随每一行返回一个已排序的行号(1…2…(n-1)…n)。使用ROWNUM(在通过查询的谓词阶段之后,但在查询执行任何排序或聚合之前,将值分配给一行)可以得到一个未排序的列表(4…567…123…45…)。我不能使用应用程序计算每一行的数字和分配数字。有什么原因不能这样做吗Oracle ROWNUM伪列,oracle,rownum,Oracle,Rownum,我有一个包含GROUPBY和ORDERBY子句的复杂查询,我需要随每一行返回一个已排序的行号(1…2…(n-1)…n)。使用ROWNUM(在通过查询的谓词阶段之后,但在查询执行任何排序或聚合之前,将值分配给一行)可以得到一个未排序的列表(4…567…123…45…)。我不能使用应用程序计算每一行的数字和分配数字。有什么原因不能这样做吗 SELECT rownum, a.* FROM (<<your complex query including GROUP BY and ORD
SELECT rownum, a.*
FROM (<<your complex query including GROUP BY and ORDER BY>>) a
选择rownum,a.*
从()开始
您可以将其作为子查询,因此:
select q.*, rownum from (select... group by etc..) q
那可能有用。。。我不知道还有比这更好的吗。你能用在线查询吗?即
SELECT cols, ROWNUM
FROM (your query)
假设您的查询已经按照您希望的方式排序,并且您只需要一个数字来指示其顺序中的行:
SELECT ROWNUM AS RowOrderNumber, Col1, Col2,Col3...
FROM (
[Your Original Query Here]
)
并将“Colx”替换为查询中列的名称。我有时也会这样做:
SELECT * FROM
(SELECT X,Y FROM MY_TABLE WHERE Z=16 ORDER BY MY_DATE DESC)
WHERE ROWNUM=1
如果您想使用ROWNUM做任何事情,而不仅仅是限制查询中返回的总行数(例如,和ROWNUM<10),则需要别名ROWNUM:
select *
(select rownum rn, a.* from
(<sorted query>) a))
where rn between 500 and 1000
选择*
(从中选择rownum rn,a.*
(a)
其中rn介于500和1000之间