1

Поддерживает ли Invantive SQL несколько условий в одном случае? Я сказал ниже, я не получил никаких результатов. Пробовал тот же оператор только с одним условием (без каскада), он получил ожидаемый результат.Объединение нескольких условий в одном случае

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

Я думаю, что вы, где предложение неправильно сформулировано. С Exact Online, проект либо имеет:

  • Вариант 1: дата окончания,
  • вариант 2: дату окончания в прошлом
  • вариант 3: или дату окончания в будущем

Первая часть case обрабатывает вариант 1 и вариант 3. Вторая часть обрабатывает вариант 2. Таким образом, в случае нет результата 'B'.

Чтобы проанализировать такие проблемы, я рекомендую включить case в предложение select и удалить фильтр. Это дает вам представление о возможных результатах.

Пример:

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} 
Смежные вопросы