有条件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'
)
)
答
的情况下,而不是当你建议立即进行删除使用AND - OR在
select *
from employee
where somecondition1
and somecondition2
and ((employeeType='MD' AND employeeReportableIndicator='Y')
OR (employeeType!='MD))
+0
可以简化。 –
可以简化。 –
@ Clockwork-Muse关心精心制作?即使可以以某种方式进行简化,但其意图已经完全清楚。 – Siyual
最后一个条件有四种可能的情况:MD + Y,MD + N,!MD + Y,!MD + Y。如果!MD,我们认为满足的条件(不关心Y/N),这消除了一半的表格。这只剩下MD + Y和MD + N ......其中唯一明显的部分是Y/N。在这一点上,检查MD是否是轻微的,因此:'AND employeeType 'MD'OR employeeReportableIndicator ='Y''可以简化。 –