You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 11g嵌套CASE语句计算销售价格逻辑不生效问题求助

问题原因
  • 逻辑结构错误:原SQL将最后CASE的计算结果与前半段基础价格做加法运算,完全没有实现「基础价格/对应分母」的核心逻辑,仅做了无意义的0值加法。
  • 运算优先级错误:sales_code='4'场景的写法1+1 / (1-9.5/100)会优先执行除法再执行加法,不符合先加2再做除法的需求。
  • 数值规则错误:原sales_code='7'的分母(1-150)/100计算结果为-1.49,不符合常规价税分离的计算逻辑,属于笔误。
  • 潜在类型错误:SUBSTR截取size后得到字符串直接和'35'做比较,会出现'100'<'35'这类不符合数值判断逻辑的问题。
修正后完整SQL
round(
  -- 前半段基础价格计算
  (
    to_number(price) *
    CASE WHEN class_code='X' THEN .48 ELSE .5 END * e1.set_qty 
    + 
    CASE 
      WHEN carton_pack_qty = '1' THEN 0 
      ELSE 
        CASE 
          WHEN NVL(TO_NUMBER(SUBSTR(size, 1,NVL(LENGTH(size) - 2,0))),1) > 35 
          THEN 3.5 
          ELSE 3 
        END
    END
    -- sales_code=4时先加2
    + CASE WHEN sales_code='4' THEN 2 ELSE 0 END
  )
  -- 统一除以对应分母
  /
  CASE 
    WHEN sales_code='1' THEN (1-17/100)
    WHEN sales_code='2' THEN (1-5/100)
    WHEN sales_code='3' THEN (1-18/100)
    WHEN sales_code='4' THEN (1-9.5/100)
    WHEN sales_code='5' THEN (1-17/100)
    WHEN sales_code='6' THEN (1-8/100)
    WHEN sales_code='7' THEN (1-15/100) -- 原写法分母为负数明显不合理,可根据实际业务修改税率
    ELSE 1
  END
,2) AS "Price"
注意事项
  • 已将size截取后的内容转为数值类型再做比较,避免字符串排序导致的判断错误,如果你业务中size就是按字符串规则判断,可以改回原字符串比较写法。
  • sales_code='7'的分母按常规15%税率修正,若实际业务有其他规则可直接修改对应值即可。
  • 完全贴合需求:非sales_code=4场景直接用基础价格除以对应分母,sales_code=4场景基础价格加2后再除以对应分母。

内容的提问来源于stack exchange,提问作者m________

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 06:48:05