1

Invantive SQL是否支持單個case語句中的多個條件?我在下面的聲明中,我沒有得到任何結果。只用1個條件(沒有級聯)嘗試相同的語句,這檢索了預期的結果。在單例語句中結合多個條件

select prj.code 
    ,  prj.startdate 
    ,  prj.enddate 
    from exactonlinerest..projects prj 
    where prj.code between $P{P_PROJECT_FROM} and $P{P_PROJECT_TO} 
    and case 
    /*  when (prj.enddate is null or prj.enddate >= sysdate) 
      then 'Y' 
      when (prj.enddate is not null and prj.enddate <= sysdate) 
      then 'N' */ 
      when prj.startdate <= sysdate 
      then 'B' 
      end 
      = $P{P_PROJECT_ACTIVE_FROM} 

回答

0

我覺得你的where子句沒有正確的表述。有了精確網上,一個項目無論有:

  • 選項1:沒有結束日期,
  • 選項2:在過去
  • 選項3結束日期:或將來的結束日期

case的第一部分處理選項1,選項3。第二部分處理選項2。因此,有從未的'B'的情況下的結果。

爲了分析這些問題,我建議在select子句中包含case並刪除過濾器。這讓你瞭解可能的結果。

實施例:

use 868056,102673 

select prj.division 
,  prj.code 
,  prj.startdate 
,  prj.enddate 
,  case 
     when prj.enddate is null or prj.enddate >= sysdate 
     then 'Y' 
     when prj.enddate is not null and prj.enddate <= sysdate 
     then 'N' 
     when prj.startdate <= sysdate 
     then 'B' 
     end 
     indicator 
from exactonlinerest..projects prj 
where prj.code between $P{P_PROJECT_FROM} and $P{P_PROJECT_TO}