2011-06-22 15 views
4

私はしばしばヌルである列StartDateを持つテーブル・ジョブを持っています。それがヌルでない場合、これは私がテーブルクォーターと内部結合することです、そうでなければ私はいくつかの他の条件で内部結合したいです。これは私が欲しいものの一種である:これが実行されたときに起動します内部結合内のElseステートメントがある場合

INNER JOIN Quarters q 
ON (IF j.StartDate IS NOT NULL (j. StartDate BETWEEN GETDATE() and q.EndDate) 
    ELSE **Some other condition**) 

エラーが間違った構文がキーワードの近くにあるということです

「場合は、」誰もがこのための正しい構文を知っていますか?

ご協力いただきありがとうございます。

答えて

9
INNER JOIN Quarters q ON 
    (j.StartDate IS NOT NULL AND j. StartDate BETWEEN GETDATE() and q.EndDate) 
OR 
    (j.StartDate IS NULL AND **Some other condition**) 
1

j.StartDateがELSE someValueのsome_other_value END

THEN NULLの場合構文は注意

CASE WHEN some_boolean_expression THEN some_value_column_or_expression 
    WHEN some_boolean_expression THEN some_value_column_or_expression 
... (repeat when as many times you need it) 
    ELSE some_value_column_or_expression 
END 

ある

CASEを試してみてください。そうではommitedすることができます。

もこれを処理する最も簡単な方法は、単に論理演算としてそれを扱うことですリンク

http://www.craigsmullins.com/ssu_0899.htm

http://msdn.microsoft.com/en-us/library/ms181765.aspx

1

を参照してください。

ON (j.StartDate IS NOT NULL 
     and j. StartDate BETWEEN GETDATE() and q.EndDate) 
    OR (some other condition) 
+0

場合、これは誤った結果を返すことができますStartDateはNULLではありませんが、「その他の条件」が満たされています。 –

+0

@Tom H .:うまくいけば、 "その他の条件"の最初の部分は 'j.start_date IS NULL 'です。一般的に、SQLに関して言えば、論理演算子はCASEよりもむしろ同等です。 – Allan

+0

確かに、私の主張は、彼のIF..ELSEと同じではないということだけです。彼の場合のELSE(構文上許されている場合)は自動的にStartDate IS NOT NULLを除外します。あなたがそれを真実でないORに変更したとき、私はこれを読んでいる誰にとっても明白であることを確認したかったのです。 –

関連する問題