2017-10-30 2 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

당신은 case 문을 원하지 않는 일을 나던 :

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

당신은 case 문을 수행 할 수도 있지만이 좋겠 좀 이상하다. 첫 번째 사례가 항상 거짓으로 평가되기를 원하므로 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

의 경우'NULL'을 수행해야합니다 별도로 처리해야합니다. 당신이 제안한 해결책은 그렇게하지 않습니다. '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`이

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