有条件地评估条件SQL
我有一个employee表,使用存储过程从中检索记录。现在,我需要在存储过程中添加一个条件- 仅当employeeType='MD'时,检查employeeReportableIndicator='N',如果'N',则不获取此记录 这意味着- 1如果员工类型!='MD'那么我应该获取记录,而不管employeeReportableIndicator列的值是多少 2如果employeeType='MD'和employeeReportableIndicator='Y'获取值 为了简化存储过程,我只编写了一个包含上述条件的小查询有条件地评估条件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'获取值 为了简化存储过程,我只编
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'可以简化。