2008-10-01 69 views
3

我有一個複雜的查詢與組by和order by子句,我需要一個排序行號(1 ... 2 ...(n-1)... n)與每行返回。使用ROWNUM(值在查詢的謂詞階段通過之後但在查詢執行任何排序或聚合之前賦值給一行)爲我提供了非排序列表(4 ... 567 ... 123 ... 45 ...)。我無法使用應用程序對每行進行計數和分配數字。甲骨文ROWNUM僞列

回答

11

是否有一個原因,你不能只是做

SELECT rownum, a.* 
    FROM (<<your complex query including GROUP BY and ORDER BY>>) a 
+1

嗯,至少不是說我們兩個會這樣做,哈哈! – Carl 2008-10-01 21:14:11

3

你可以做它作爲一個子查詢,所以有:

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

這將可能工作...不知道有沒有比這更好的東西。

0

您可以使用內嵌查詢嗎?即

SELECT cols, ROWNUM 
FROM (your query) 
0

假設你查詢已訂購的方式,你的願望,你只是想一個數字來表示它是什麼行中的順序:

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

和替換「COLX」與您的查詢中列的名稱。

0

我有時也這樣做:

SELECT * FROM 
(SELECT X,Y FROM MY_TABLE WHERE Z=16 ORDER BY MY_DATE DESC) 
WHERE ROWNUM=1 
0

如果你想使用ROWNUM做任何事情超過限制的總行數查詢(例如AND ROWNUM < 10)你需要返回別名ROWNUM:

select * 
    (select rownum rn, a.* from 
      (<sorted query>) a)) 
where rn between 500 and 1000