- ベストアンサー
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を実行すれば取得できますでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
order by case when coalesce(a,-9999) > coalesce(b,-9999) then a else coalesce(b,-9999) end とかどうでしょう? だめだったらasで別名定義も試してみてください。 #nullは適当に-9999なんてしてみました(^^;
その他の回答 (2)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
DBはなんですか? Oracle9i以降ならcase whenで、以前だったらsignとdecodeの組み合わせ、AccessやSQLServerだったらIIfで、aかbどちらか大きいほうを求めるような式をつくり、そのフィールドをorder byで指定してください。
補足
すみません、情報不足で・・・ DBはPostgreSQL7.0です。
- takataka111
- ベストアンサー率46% (23/50)
お疲れ様です いまいち質問の意図がわからないのですが、結果として どのようなデータになるかを表示していただければ回答者も理解しやすいと思いますよ。
補足
すみません、取得したいデータは表示してあります。 2|6 3|5 *|4 4|2 2|* 1|2 *|1 説明文なくてすみません。 簡単にいうと、各レコードにおいて aもしくはbのフィールドの大きい方の値をもとに昇順に取得したいとかんがえています。 a, bフィールドの値の大きいほうが同じレコードについてはもう一方のフィールドの値の大小(NULL)については考えなくていいです。 a|b === 5|1 5| 5|2 ↑これは全部同じ順位でかまわないということです。
お礼
天才!!