有条件地评估条件SQL

有条件地评估条件SQL,sql,db2,case,sybase,case-when,Sql,Db2,Case,Sybase,Case When,我有一个employee表,使用存储过程从中检索记录。现在,我需要在存储过程中添加一个条件- 仅当employeeType='MD'时,检查employeeReportableIndicator='N',如果'N',则不获取此记录 这意味着- 1如果员工类型!='MD'那么我应该获取记录,而不管employeeReportableIndicator列的值是多少 2如果employeeType='MD'和employeeReportableIndicator='Y'获取值 为了简化存储过程,我只编

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

仅当employeeType='MD'时,检查employeeReportableIndicator='N',如果'N',则不获取此记录

这意味着-

1如果员工类型!='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
以上是给我的语法错误

在else true END END END后发现意外的令牌END-OF语句。预期的令牌可能包括:。SQLSTATE=42601

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

您不需要这个案例,只需要一个OR条件:

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

而不是在你应该使用AND-或where的情况下

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

“可以简化吗?”发条缪斯想详细阐述一下吗?即使它可以以某种方式简化,其意图也非常清楚。最后的条件有四种可能的情况:MD+Y,MD+N!MD+Y!MD+Y.如果!MD,我们认为满足的条件不关心y/n,它消除了表的一半。这只剩下MD+Y和MD+N。。。其中唯一不同的部分是Y/N。此时,检查MD是否无关紧要,因此:和employeeType'MD'或employeeReportableIndicator='Y'可以简化。