【问题标题】:Missing keyword in nested CASE WHEN statement嵌套 CASE WHEN 语句中缺少关键字
【发布时间】:2016-11-09 07:32:17
【问题描述】:

遇到错误Missing keyword 出现并突出显示在我的第二行查询中。我试图删除额外的情况,但仍然发生。

CASE WHEN NVL(BAT_WK02,0)>=NVL(TARGET_BAT,0) THEN 
    CASE WHEN NVL(RMO_ENTITLED_WK01,0)>0 THEN NVL(SKU_SALES_WK02,0) >= NVL(TARGET_SKU,0) THEN NVL (TARGET_SKU,0) * 1 ELSE NVL(SKU_SALES_WK02,0) *1 
                             WHEN NVL(RMO_ENTITLED_WK01,0)=0 THEN NVL(SKU_SALES_WK02,0) >= NVL(TARGET_SKU,0) THEN NVL (TARGET_SKU,0) * 0.50 ELSE NVL (SKU_SALES_WK02) * 0.50 END
                     ELSE 0 END RMO_ENTITLED_SKU_02,

有什么建议可以帮助我吗?

【问题讨论】:

    标签: sql keyword


    【解决方案1】:
    CASE WHEN NVL(BAT_WK02,0)>=NVL(TARGET_BAT,0) THEN 
    ( 
       CASE WHEN NVL(RMO_ENTITLED_WK01,0)>0 THEN NVL(SKU_SALES_WK02,0) >= NVL(TARGET_SKU,0) 
            WHEN <--Here Statement missing--> 
            THEN NVL (TARGET_SKU,0) * 1 ELSE NVL(SKU_SALES_WK02,0) *1 END 
    )
    WHEN NVL(RMO_ENTITLED_WK01,0)=0 THEN NVL(SKU_SALES_WK02,0) >= NVL(TARGET_SKU,0) 
    WHEN <--Here Statement missing--> 
    THEN NVL (TARGET_SKU,0) * 0.50 ELSE NVL (SKU_SALES_WK02) * 0.50 ELSE 0 END
    

    【讨论】:

    • 基本上我要检查三件事,首先如果 BAT_WK02 大于 TARGET_BAT,然后继续检查 RMO_ENTITLED_WK01 是否有值(达到 wk_01 目标)或没有(未能达到 wk01 目标)。如果 RMO_ENTITLED_WK01 有值,则进一步检查 SKU_SALES_WK02 值是否达到最大报销,如果是,则使用最大上限 (TARGET_SKU) 乘以 1,否则使用销售数字 (SKU_SALES_WK02) * 1;如果 RMO_ENTITLED_WK01 为 0(未达到 wk01 目标),那么它应该 (SKU_SALES_WK02) * 0.50 如果需要更多说明,请告诉我,谢谢。
    • 你能给出一些示例数据和预期的输出
    • 当然。如果 RMO_ENTITLED_WK01 = 5; SALES_CAP = 10; SALES_WK02 = 15 THEN SALES_CAP * 1 IF RM0_ENTITLED_WK01 = 5; SALES_CAP = 20; SALES_WK02 = 15 THEN SALES_WK02 *1 IF RMO_ENTITLED_WK01 = 0; SALES_CAP = 10; SALES_WK02 =15 THEN SALES_CAP * 0.5 IF RMO_ENTITLED_WK01 = 0; SALES_CAP = 20; SALES_WK02 = 15 THEN SALES_WK02 * 0.5 希望这会有所帮助!
    • 乘以 1 或 0.5 的结果将是 RMO_ENTITLED_WK02。这种情况下何时检查销售人员是否连续两周达到目标,奖励为1,否则为0.5。棘手的部分是它需要检查上限,因为它不能被过度奖励。
    【解决方案2】:

    我认为您应该为查询中的每个“then”关键字添加一个“when”关键字,但第 2-3 行缺少一个。

    CASE WHEN (BAT_WK02,0)>=NVL(TARGET_BAT,0) THEN CASE WHEN NVL(RMO_ENTITLED_WK01,0)>0 THEN NVL(SKU_SALES_WK02,0 ) >= NVL(TARGET_SKU,0) 那么 NVL (TARGET_SKU,0) * 1 ELSE ...

    顺便说一下,你有一个嵌套的“case when”,但我猜应该是这样的

    【讨论】:

      猜你喜欢
      • 2018-01-12
      • 2020-01-27
      • 2015-04-17
      • 2016-12-10
      • 2020-08-14
      • 2014-07-12
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多