2012-03-12 3 views
9

私は3つの列を持つテーブルを持っています。最初の列にはIDが含まれ、他の2つの列には日付が含まれます(最大で1つはnullですが、何かに影響するとは思わない)。どの日付を基準にしてIDを注文するのですか?私は試しました2つの異なる(おそらくヌル)列によるSQLの順序

ORDER BY CASE 
WHEN date1 > date2 THEN date1 
ELSE date2 
END 

しかし、これは動作しませんでした。誰でも助けてくれますか?また、私が他の人が投稿した同様の問題はすべて、最初の列であるに基づいて結果が並べ替えられ、最初の列がnullの場合はの2番目の列になります。私は最初にすべての単一のヌル値を定義する必要がありますか?私はこのテーブルを完全な外部結合で作成していますので、これは全く別の質問ですので、null値を使用するとうまくいけばうまくいきます。

+1

あなた 'CASE'式は、それは' date2'がnullの場合をサポートしていないことを除いて、私には正常に見えます。それをサポートするために、 'date1> date2 OR date2 IS NULL THEN date1 ELSE date2 END'と書いてみましょう。しかし、あなたはそれが "うまくいかない"と言います。あなたはもっと具体的になりますか?たとえば、注文が正しく行われなかった実際のデータを投稿できますか? – ruakh

+0

Gabe、どのデータベースがクエリを実行していますか? –

+0

申し訳ありませんが、私は彼らがすべて同じように働いていると思いました。しかし、私はOracleを使用しています。それはあなたのために十分な特定のものかどうかは分かりません。 :S –

答えて

15

私はあなたの問題は列のいずれかがNULLの場合、失敗の比較に関連していると信じています。だから、あなたはおそらく必要があります。

ORDER BY CASE 
      WHEN date1 IS NULL THEN date2 
      WHEN date2 IS NULL THEN date1 
      WHEN date1 > date2 THEN date1 
      ELSE     date2 
      END 
+0

これは、ありがとう! :D –

-1

てみてください...

SELECT MAX(date1,date2) date FROM table ORDER BY date; 
+0

ええ、しかし、実際には、あなたはdate1!= nullの上に何らかの形でテーブルを結合せずにStandard SQLでそれを実際に行うことはできません。その後、date2!= nullでも再び参加します。 – DanRedux

+0

(これまでのコメントを削除してより明確なものに置き換えました)私はDBMSが 'MAX'の使用をサポートしているとは思っていません。おそらくあなたは '偉大な'を考えているのでしょうか?しかし、とにかく、このアプローチは本当に必要ありません。これらの式は 'ORDER BY'節に入ります。 – ruakh

+0

彼らはそれ自身の列のようにエイリアシングすることもできますが、日付も取得することができます。余分な、自由な機能。 – DanRedux

関連する問題