1

Invantive SQLは単一のcase文で複数の条件をサポートしますか?私は以下のステートメント、私は結果を得ていない。 1つの条件(カスケードなし)で同じステートメントを試してみました。これにより、期待される結果が得られました。単一のcase文で複数の条件を組み合わせる

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番目の部分はオプション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} 
関連する問題