Oracle SQL中处理费率卡(Ratecard)异常值的实现方案
解决方案
直接在关联Rates表的条件中,通过CASE WHEN对m.height做预处理,覆盖null和超界的场景:
SELECT m.*, NVL(r.cost, 0) FROM m LEFT JOIN e ON e.key = m.key LEFT JOIN rates r ON CASE WHEN m.height IS NULL THEN 0 WHEN m.height > 7 THEN 7 ELSE m.height END BETWEEN r.height_min AND r.height_max AND e.power BETWEEN r.power_start AND r.power_end AND m.power BETWEEN r.power_start AND r.power_end AND r.product_type = m.product_type
关键逻辑说明
- 处理null值:将null的height替换为0,刚好匹配费率卡中
height_min=0、height_max=1的最低档位 - 处理超界值:将大于7的height替换为7,匹配费率卡中
height_min=6、height_max=7的最高档位 - 原有逻辑保留:功率匹配、产品类型匹配的条件保持不变,确保基础费率规则正常生效
- 兜底处理:依然用
NVL(r.cost, 0)应对极端情况(比如功率不在任何费率区间时),返回默认成本0
内容的提问来源于stack exchange,提问作者Aparna
相关产品推荐
相关产品推荐

