有条件evaulate条件SQL

问题描述:

我有我从中检索使用一个存储过程的记录,现在我需要在存储过程中添加一个条件员工表 -有条件evaulate条件SQL

只有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

也就是我的Appro公司ach为正确写入查询,请建议是否有更好的解决方案。我使用的DB2和Sybase

你不需要CASE对于这一点,只是一个OR条件:

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。如果!MD,我们认为满足的条件(不关心Y/N),这消除了一半的表格。这只剩下MD + Y和MD + N ......其中唯一明显的部分是Y/N。在这一点上,检查MD是否是轻微的,因此:'AND employeeType 'MD'OR employeeReportableIndicator ='Y''可以简化。 –

的情况下,而不是当你建议立即进行删除使用AND - OR在

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

可以简化。 –