在单个 case 语句中组合多个条件
Combining multiple condition in single case statement
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}
我认为您的 where 子句表述不正确。使用 Exact Online,项目要么具有:
- 选项 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}
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}
我认为您的 where 子句表述不正确。使用 Exact Online,项目要么具有:
- 选项 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}