Объединение нескольких условий в одном выражении

Поддерживает ли Invantive SQL несколько условий в одной инструкции? Я в заявлении ниже, я не получил никаких результатов. Попытка того же оператора только с 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} 

1 ответ

Решение

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

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

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

Чтобы проанализировать такие проблемы, я рекомендую включить 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}   
Другие вопросы по тегам