我从MIS提供商处获得了以下CASE WHEN
声明。我正在考虑简化这一点,因为我不是专家,因此我更容易阅读我必须理解和学习的更多机会。
目前的声明:
,CASE SopOrderItem.SoiProcessMethod:WHEN 0
THEN IF SopOrderItem.SoiReplenishmentOrder
THEN DO: IF SopProduct.SopPrePostPaid = 0
THEN ASSIGN lv-ProcessMethod = "Replenishment Pay on Replenishment".
ELSE ASSIGN lv-ProcessMethod = "Replenishment Pay on Delivery".
END.
ELSE lv-processmethod = "Call Off":U.
WHEN 1 THEN lv-processmethod = "On Demand":U.
WHEN 2 THEN lv-processmethod = "Personalised":U.
END CASE
这就是我能够写出来的,我知道它的作用是我坚持的部分是WHEN SopOrderItem.SoiProcessMethod = 0
。在这一点上,我不明白这个说法。从我用英语告诉我的是,当SopOrderItem.SoiProcessMethod为0时,检查SopProduct.SopPrePostPaid是否也为0如果两者都为真,那么“Replenishment Pay on Replenishment”如果不是那么“Replenishment Pay on Delivery”。
有没有办法可以简化声明,让我更容易理解。
我现在有以下声明,但这导致我的查询失败并需要花费很长时间才能刷新:
CASE WHEN SopOrderItem.SoiProcessMethod = 1 THEN 'On Demand'
WHEN SopOrderItem.SoiProcessMethod = 2 THEN 'Personalised'
WHEN SopOrderItem.SoiProcessMethod = 0 AND SopProduct.SopPrePostPaid = 0 THEN "Replenishment Pay on Replenishment"
WHEN SopOrderItem.SoiProcessMethod = 0 AND SopProduct.SopPrePostPaid <> 0 THEN "Replenishment Pay on Delivery"
ELSE 'Call Off'
END
我个人会将CASE和IF分开,而不是将它们合并。但这只会提高可读性。如果这是您依赖这些值的某种查询的一部分,我认为您需要重新考虑它,因为它不会非常有效。
(您需要确保此代码确实提供了相同的结果 - 没有数据且没有SopOrderItem + SopProduct的定义,它很难。
CASE SopOrderItem.SoiProcessMethod:
WHEN 0 THEN DO :
IF SopOrderItem.SoiReplenishmentOrder THEN DO:
IF SopProduct.SopPrePostPaid = 0 THEN
ASSIGN lv-ProcessMethod = "Replenishment Pay on Replenishment".
ELSE
ASSIGN lv-ProcessMethod = "Replenishment Pay on Delivery".
END.
ELSE lv-processmethod = "Call Off":U.
END.
WHEN 1 THEN lv-processmethod = "On Demand":U.
WHEN 2 THEN lv-processmethod = "Personalised":U.
END CASE.
你也可以只做IF:
IF SopOrderItem.SoiProcessMethod = 0 THEN DO :
IF SopOrderItem.SoiReplenishmentOrder THEN DO:
IF SopProduct.SopPrePostPaid = 0 THEN
ASSIGN lv-ProcessMethod = "Replenishment Pay on Replenishment".
ELSE
ASSIGN lv-ProcessMethod = "Replenishment Pay on Delivery".
END.
ELSE lv-processmethod = "Call Off":U.
END.
ELSE IF SopOrderItem.SoiProcessMethod = 1 THEN lv-processmethod = "On Demand":U.
ELSE IF SopOrderItem.SoiProcessMethod = 2 THEN lv-processmethod = "Personalised":U.