Объединение нескольких условий в одном выражении
Поддерживает ли 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}