3

我有一个带有 group by 和 order by 子句的复杂查询,我需要每行返回一个排序的行号 (1...2...(n-1)...n)。使用 ROWNUM (在通过查询的谓词阶段但在查询进行任何排序或聚合之前将值分配给行)给我一个未排序的列表(4...567...123...45 ...)。我不能使用应用程序为每一行计算和分配数字。

4

6 回答 6

11

有没有你不能做的理由

SELECT rownum, a.* 
  FROM (<<your complex query including GROUP BY and ORDER BY>>) a
于 2008-10-01T21:12:49.880 回答
3

你可以把它作为一个子查询来做,所以有:

select q.*, rownum from (select... group by etc..) q

这可能会工作......不知道是否有比这更好的东西。

于 2008-10-01T21:13:10.643 回答
0

可以使用内联查询吗?IE

SELECT cols, ROWNUM
FROM   (your query)
于 2008-10-01T21:13:11.890 回答
0

假设您的查询已经按照您想要的方式排序,并且您只需要一个数字来指示它的顺序是哪一行:

SELECT ROWNUM AS RowOrderNumber, Col1, Col2,Col3...
FROM (
    [Your Original Query Here]
)

并将“Colx”替换为查询中列的名称。

于 2008-10-01T21:14:57.267 回答
0

我有时也会做类似的事情:

SELECT * FROM
(SELECT X,Y FROM MY_TABLE WHERE Z=16 ORDER BY MY_DATE DESC)
WHERE ROWNUM=1
于 2008-10-06T19:47:18.150 回答
0

如果您想使用 ROWNUM 来做任何事情,而不是限制查询中返回的总行数(例如 AND ROWNUM < 10),您需要给 ROWNUM 起别名:

 select * 
   (select rownum rn, a.* from 
          (<sorted query>) a))
 where rn between 500 and 1000 
于 2010-07-27T14:25:59.817 回答