• ベストアンサー

order by について

質問させてください。 下記テーブルがあるとします。 [samle_tbl](フィールドa, b(integer)) ====== a|b ====== 2|* *|4 3|5 4|2 *|1 2|6 1|2 (※*はNULLデータ) 上記のテーブルでa, bフィールドにおいて数字の大きいレコード順に取得したいとかんがえています。 2|6 3|5 *|4 4|2 2|* 1|2 *|1 簡単にいうとa, bフィールドの値においてどちらかの数値がa, bフィールド内において降順にレコードをシュとくしたいです。 同じ順番に値する場合*(NULLデータ)を含むレコードと含まないレコードの順番は気にしません。 どのようなSQLを実行すれば取得できますでしょうか?

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

order by case when coalesce(a,-9999) > coalesce(b,-9999) then a else coalesce(b,-9999) end とかどうでしょう? だめだったらasで別名定義も試してみてください。 #nullは適当に-9999なんてしてみました(^^;

TOKIO2003
質問者

お礼

天才!!

その他の回答 (2)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

DBはなんですか? Oracle9i以降ならcase whenで、以前だったらsignとdecodeの組み合わせ、AccessやSQLServerだったらIIfで、aかbどちらか大きいほうを求めるような式をつくり、そのフィールドをorder byで指定してください。

TOKIO2003
質問者

補足

すみません、情報不足で・・・ DBはPostgreSQL7.0です。

回答No.1

お疲れ様です いまいち質問の意図がわからないのですが、結果として どのようなデータになるかを表示していただければ回答者も理解しやすいと思いますよ。

TOKIO2003
質問者

補足

すみません、取得したいデータは表示してあります。 2|6 3|5 *|4 4|2 2|* 1|2 *|1 説明文なくてすみません。 簡単にいうと、各レコードにおいて aもしくはbのフィールドの大きい方の値をもとに昇順に取得したいとかんがえています。 a, bフィールドの値の大きいほうが同じレコードについてはもう一方のフィールドの値の大小(NULL)については考えなくていいです。 a|b === 5|1 5| 5|2 ↑これは全部同じ順位でかまわないということです。

関連するQ&A