2016-08-12 7 views
0

特定の値をチェックしないでください。case文は、私だけがWHERE句でCASE文の必要

は、我々は二つのテーブルのXとYを持っていると言うことができますが

Xは、すなわち3列、EmpId,Name,JoinDate,DeptID

を持っています

Yは4列、すなわちEmpId,JoinDate,DeptID,DeptRefCd

私は(1,2,3)でX.deptIdを除き、それはX.JoinDate = ISNULL(Y.JoinDateをチェックしないような結果を得るためにきてい、 '')。つまり、JoinDateを無視する必要があります条件DEPTID = 1、2、3

私は以下のように書きましたが、その示すエラーは:

CASE 
    WHEN X.deptId NOT IN (1,2,3) THEN X.JoinDate=ISNULL(Y.JoinDate,'') 
END 

示唆してください。

+0

あなたは 'CASE'は必要ありません。あなたは基本的なブール論理、 'AND's、' OR'sと 'NOT'sを必要とします。 –

+0

あなたは私にそれについての質問を与えることができます....可能であれば小さな例 – Bharath

+0

'X.JoinDate = ISNULL(Y.JoinDate、 '')'が真であれば、正しい? 'X.deptid in(1,2,3)'が真であれば、その行をインクルードしたいでしょうか?したがって、あなたには2つの条件があり、それらのどちらかが真であれば、その行を含めることになります。両方が真である場合は、特別な操作を行う必要はなく、それらの行を含めたい場合もあります。したがって、間に 'OR'を挿入できるという条件が2つあるようです。 –

答えて

0

私はこれがあなたの望むものを与えると思います。私はあなたが作成する方法を知らない結合に加えて、テーブルがEmpIDに参加する必要があると仮定しています。

SELECT [whatever columns you want] 
FROM X 
    JOIN Y 
     ON X.EmpID = Y.EmpID 
     AND (X.deptId IN (1,2,3) 
     OR (X.deptId NOT IN (1,2,3) AND X.JoinDate=ISNULL(Y.JoinDate,''))) 

はまた、ISNULLを伴うこと参加するには、インデックスが基礎となる列に使用することはできませんので、非常に遅くなる傾向にあります。しかし、テーブルの大きさによっては、それは問題ではないかもしれません。