有条件地推测条件SQL

时间:2017-09-25 18:16:39

标签: sql db2 case sybase case-when

我有一个employee表,我现在使用存储过程检索记录,我需要在存储过程中添加一个条件 -

仅当employeeType =' MD'然后检查employeeReportableIndicator =' N' ,如果' N'然后不要取这条记录。

这隐含地意味着 -

1)如果employeeType!=' MD'无论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-STATEMENT"发现"否则为真END)END"。预期的令牌可能包括:"" .SQLSTATE = 42601

此外,我的方法是正确编写查询,请建议是否有更好的解决方案。我正在使用DB2和Sybase

2 个答案:

答案 0 :(得分:0)

您不需要CASE,只需要OR条件:

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

答案 1 :(得分:0)

而不是在你在哪里使用AND - OR

的情况
select * 
from   employee 
where  somecondition1 
and    somecondition2 
and    ( ( employeeType='MD' AND employeeReportableIndicator='Y') 
           OR ( employeeType!='MD ))