こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ソートと列番号

データ取得時に列番号を組み込みたい場合
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

では同じ順序でデータが取得されるのでしょうか?
簡単にデータを作ってみたところ、同じようなんですが・・・・

投稿日時 - 2012-09-06 06:34:27

QNo.7683069

すぐに回答ほしいです

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

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句順を保証してはいないと思います。

投稿日時 - 2012-09-06 16:43:39

補足

ありがとうございます。

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だったようなので・・・)

投稿日時 - 2012-09-07 08:19:25

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問