• ベストアンサー

ソートと列番号

データ取得時に列番号を組み込みたい場合 ROW_NUMBER() OVER (ORDER BY ソートキー) で実現できますが、これは実際ソートも行ってくれるのでしょうか? 例えば 1) select dt1,dt2, dt3,ROW_NUMBER() OVER (ORDER BY dt1,dt2,dt3) as dt4 from table_1 2) select dt1,dt2, dt3 from table_1 ORDER BY dt1,dt2,dt3 では同じ順序でデータが取得されるのでしょうか? 簡単にデータを作ってみたところ、同じようなんですが・・・・

質問者が選んだベストアンサー

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

SQL SERVER 2008 R2、 PostgreSQL 9.1(cygwin)で試したところではrow_number()のover句でのオーダー順で出力されました。 実行計画をみても、WINDOWSソートの後はシーケンス処理のみということで今の実装上ではover句の指定順になると思われます。 なお、SELECT文の最後にORDER BYでROW_NUMBER関数の値を指定したところ、SQL SERVER 2008 R2では無視(最適化)され、PostgreSQLでは実行されるようです。 ただし、SQLの規格としてはおそらくover句順を保証してはいないと思います。

yamada009
質問者

補足

ありがとうございます。 SQLServer2008 では無視(最適化)されるとのことですがこれはどういう意味なんでしょうか? 試してみたものは 2005 Express なのですが、実装は 2008 R2 なので詳細が気になります。 2008 R2 はMK時にインストールする予定なのでまだ環境はありません。 結局 select dt1,dt2, dt3, dt4 from ( select dt1,dt2, dt3,ROW_NUMBER() OVER (ORDER BY dt1,dt2,dt3) as dt4 from table_1 ) mainsearch order by dt4 と記述するということで問題ないのでしょうか? (うろ覚えですが order とか where とかってエイリアスはNGだったようなので・・・)

すると、全ての回答が全文表示されます。

関連するQ&A