3

groupby句とorderby句を使用した複雑なクエリがあり、すべての行で返される並べ替えられた行番号(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

インラインクエリを使用できますか?すなわち

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 に答える