2017-09-25 98 views
-2

我有我從中檢索使用一個存儲過程的記錄,現在我需要在存儲過程中添加一個條件員工表 -有條件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

回答

0

你不需要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''可以簡化。 –

0

的情況下,而不是當你建議立即進行刪除使用AND - OR在

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

可以簡化。 –