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

Back to top

Information