2017-09-25 17 views
-2

조건 SQL을 평가 해 -는 조건부 내가 지금은 저장 프로 시저에 조건을 추가 할 필요가 저장 프로 시저를 사용하여 레코드를 검색있는 직원 테이블이

employeeType = 'MD'는 다음 employeeReportableIndicator 여부를 확인하는 경우에만 = 'N', 'N'이면이 레코드를 가져 오지 않습니다.

이 내재적 수단 -

1) employeeType = 'MD'는 다음 I 무관 employeeReportableIndicator 열 값의 기록을 인출할지!.

2) employeeType = 'MD'이고 employeeReportableIndicator = 'Y'인 경우 값을 가져옵니다.

는 문서라도 내가 지금

select * 
from employee 
where somecondition1 
and somecondition2 
and CASE when employeeType='MD' 
      then (CASE when employeeReportableIndicator='N' 
         then false 
         else true 
        END) 
     END 

까지 위의 나에게주고 구문 오류

예상치 못한 시도 무엇 난 그냥 위의 조건을 포함하는 작은 쿼리를 작성하고 저장 프로 시저를 단순화하기 위해 토큰 "END OF OF STATEMENT"가 "else true end)"END 다음에 발견되었습니다. 예상 토큰에 다음이 포함될 수 있습니다 : "".SQLSTATE = 42601

올바른 쿼리 작성을위한 ach, 더 나은 해결책이 있는지 제안하십시오. 나는

답변

0

당신은 단지 OR 조건이에 대한 CASE 필요하지 않습니다 DB2 및 사이베이스를 사용하고 있습니다 : 당신이 AND를 사용 말아야

Select * 
From Employee 
Where SomeCondition1 
And  SomeCondition2 
And  
( 
    EmployeeType <> 'MD' 
    Or 
    ( 
     EmployeeType = 'MD' 
    And EmployeeReportableIndicator = 'Y' 
    ) 
) 
+0

간단하게 처리 할 수 ​​있습니다. –

+0

@ Clockwork-Muse 정교한 케어? 어떻게 든 간소화 될 수 있다고하더라도 의도는 서면으로 분명합니다. – Siyual

+0

MD + Y, MD + N,! MD + Y,! MD + Y의 4 가지 가능한 경우가 있습니다. ! MD 인 경우 충족 된 조건을 고려합니다 (Y/N은 상관하지 않음). 이는 표의 절반을 제거합니다. 이것은 단지 MD + Y와 MD + N을 남겨 둡니다 ... 유일한 유일한 부분은 Y/N입니다. 이 시점에서 MD가 경박한지 확인하는 것은 다음과 같습니다. 'AND employeeType <>'MD '또는 employeeReportableIndicator ='Y'' –

0

대신 경우의 - 또는 어디

select * 
from employee 
where somecondition1 
and somecondition2 
and ((employeeType='MD' AND employeeReportableIndicator='Y') 
      OR (employeeType!='MD)) 
+0

단순화 할 수 있습니다. –