Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle ROWNUM伪列_Oracle_Rownum - Fatal编程技术网

Oracle ROWNUM伪列

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

我有一个包含GROUPBY和ORDERBY子句的复杂查询,我需要随每一行返回一个已排序的行号(1…2…(n-1)…n)。使用ROWNUM(在通过查询的谓词阶段之后,但在查询执行任何排序或聚合之前,将值分配给一行)可以得到一个未排序的列表(4…567…123…45…)。我不能使用应用程序计算每一行的数字和分配数字。

有什么原因不能这样做吗

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之间