• 締切済み

DISTINCTで選択した項目以外でのソート

お世話になります。 SQLサーバ2000から、SQLサーバ2008への移行を行っております。 以下のようなSQL文は2000では許容されていたようで、問題なく(?)稼働していただのですが2008に移行したら軒並みエラーになってしまいました。 エラーで稼働確認が進まないので、修正方法を検討しているのですが、まだSQLサーバが使えない環境で確認ができません。 2000が来てから確認する予定ではありますが、以下の通りで新旧・同様のソート順になると考えて問題ございませんでしょうか。 教えていただけると幸甚です。 【例1】 SELECT DISTINCT ISNULL(T1.C1,""),T1.C2 FROM T1 ORDER BY T1.C1 →ORDER BY 項目を ISNULL(T1.C1,"")に変更 【例2】 SELECT DISTINCT T1.C1,T1.C2 FROM T1 ORDER BY T1.C1,T1.C3 →ORDER BY 項目から T1.C3 を削除する 以上です。宜しくお願いいたします。

みんなの回答

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

【例2】はホントのSQL文ですか?selectする列とOrder Byの列が合ってません。 やはり実機で、シンプルな検証データ・テーブルで確認をしたほうが良いでしょう。 OracleだとOrder By をselectする列番号で指定できましたが、SQLServerはどうでしたっけ。 SELECT DISTINCT ISNULL(T1.C1,""),T1.C2 FROM T1 ORDER BY 1

tera2270
質問者

お礼

ご回答ありがとうございます。 やはり【例2】は不思議な感じですよね。。 SQLサーバー2008でも動きません。 SQLサーバ2008は使用できる環境はあるのですが、SQLサーバー2000が使用できる環境がまだ用意できていなく、2000と同様の動きになるように修正したいのですが確認できない状況です。 教えていただいた、SELECT DISTINCT ISNULL(T1.C1,""),T1.C2 FROM T1 ORDER BY 1 (列番号指定)はSQLサーバーでも使用可能です。 SQLサーバ2008でそのように修正して動かした場合、SQLサーバー2000にて【例1】で動かした場合と同様のソート順になるのかご教授いただければ、よろしくお願いいたします。

関連するQ&A