【问题标题】:Combining multiple condition in single case statement在单个 case 语句中组合多个条件
【发布时间】:2016-12-01 18:45:02
【问题描述】:

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} 

【问题讨论】:

    标签: exact-online invantive-sql invantive-control invantive-query-tool


    【解决方案1】:

    我认为您的 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}   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      • 2018-10-12
      相关资源
      最近更新 更多