2017-10-30 33 views
0

フィールド名がカラムにあり、カラムが別の名前のデータ カラム名がOracleで、データcoulmnがNULLの場合、クエリに返されません。where句のOracleクエリー・ケース文

私はこれを試してみましたが、それはあなたがちょうどこの、case文を望んでいない

AND field_name = Case When field_name= 'Oracle' And Data IS Null 
field_name <> 'Oracle' 
Else field_name 
End 

答えて

0

仕事doesntの:あなたはcase文でそれを行うことができ

AND NOT (field_name = 'Oracle' AND data is null) 

を、それは思いますが少し変だ。最初のケースを常にfalseに評価したいので、THENの後の部分はfield_nameと等しくないものにする必要があります。この場合、元の文字列と同じにはならない文字列の先頭にいくつかの文字( "not")を追加しました。

AND field_name = Case When field_name= 'Oracle' And Data IS Null 
    THEN 'not' || field_name 
    Else field_name 
    End 
+0

場合別々に処理してください。あなたが提供したソリューションはそれをしません。 'field_name'と' data'の両方が 'NULL'である行を通過させます。 – mathguy

0

このようなものを使用してください。

AND 1 = (
    CASE 
     WHEN field_name = 'Oracle' 
      AND data IS NULL THEN 0 
     ELSE 1 
    END 
); 
-1

ここでは、使用できるクエリを示します。

with tmp as ( 
    select 'Oracle' as field_name , 1 as data from dual union all 
    select 'Oracle' as field_name , null as data from dual union all 
    select NULL as field_name , null as data from dual union all 
    select 'Test' as field_name , null as data from dual) 
    Select * from tmp 
    Where 1 = case when field_name = 'Oracle' and data is null 
       then 0 
       else 1 
       end 
+0

ダウン投票には、議決権行使の論理を説明してください。コメントなしでのダウン投票は、私が思うに生産的なものではありません。 – Jignesh

0

あなたの文がTHEN句が欠落しているとfield_name <> 'Oracle'が無効である:

に簡略化することができ
AND field_name = CASE 
       WHEN field_name = 'Oracle' AND Data IS NULL 
       THEN 'FALSE' 
       ELSE field_name 
       End 

: `field_name`は` NULL`必見であるとき

AND (field_name <> 'Oracle' OR (Data IS NOT NULL AND field_name IS NOT NULL))