トップページ >  Oracle SQL >  order byした後にrownumを付加する
初版2006/04/17: 最終更新日2006/04/17
  order byした後にrownumを付加する
order byした後にrownumを付加する
SQLではorder by句を指定して検索結果をソートすることが出来ます。
また、検索結果に対してシーケンシャルな番号を振る rownum という特別なフィールドがあります。
この二つを同時に使用すると、まず検索結果の各行に対してrownumがふられ、その次にorder byが実行されるため、rownumの順番が滅茶苦茶になってしまいます。

SELECT emp_id,rownum
FROM   employee;
このSQLを実行すると結果は下図のようになります。

<<table1>>
order byした後にrownumを付加する
order byした後にrownumを付加する

このSQLに対してorder byを指定すると、SQLは下記のようになります。

SELECT   emp_id,rownum
FROM     employee
order by emp_id;
このSQLを実行すると結果は下図のようにrownumが滅茶苦茶な順序になってしまいます。

<<table2>>
order byした後にrownumを付加する
order byした後にrownumを付加する

コーディングをしていると、order byした後にrownumをふりたい場合があります。
こういった場合、 仮想表 というのを利用して対処します。

先ほどのtable2のようにorder byを指定したSQLを作成します。rownumはここでは外します。このSQL検索結果を仮想表としてFROM句に記述します。
そして、その仮想表に対してのフィールドとしてrownumをふります。
具体的にSQLは以下のようになります。

SELECT emp_id,rownum
FROM (select   emp_id 
      from     tztorsp
      ORDER BY emp_id
      );
from句の()で囲んだSQL文が仮想表になります。ここでまずorder byします。このorder byした仮想表に対してrownumをふっていることになると以下のように意図したとおりにSQL結果が得られます。

emp_id rownum
------ ------
1992003     1
2000001     2
1995311     3
1972003     4


Information
リンクについて
個人情報保護方針
Yahoo!ブックマークに登録

社長ブログ
やる気はあるがお金がない㈱コンフレッジブログ

広告
株式会社グローハウジング


サイト内検索
当サイト内を検索できます↓


PV