lsjweiyi 2023-06-14 12:11 采纳率: 100%
浏览 14
已结题

oracle 计算值多处地方decode做判断该如何优化

oracle 中,我有一个字段(名字叫 ‘输出参数’)的构造形如:“1|23|42323|阿斯达|4252额|安达安达a|安达a”,它使用“|”拼接的,长度挺长。
其中有几个我想取的值,由于他位置会变,但是有一定规律:

--rh_split是我自定义的分割函数,表示取第一个字符串。在这里并不重要。
总费用=rh_split(a.输出参数, '|', 31) + rh_split(a.输出参数, '|', 32)

而我好几个想取的数,都跟这个规律相关,于是我写出了如下代码:

select decode(rh_split(a.输出参数, '|', 31) + rh_split(a.输出参数, '|', 32),
              a.总费用,
              rh_split(a.输出参数, '|', 30),
              rh_split(a.输出参数, '|', 31)) as 费用A,
              
       decode(rh_split(a.输出参数, '|', 31) + rh_split(a.输出参数, '|', 32),
              a.总费用,
              rh_split(a.输出参数, '|', 31),
              rh_split(a.输出参数, '|', 32)) as 费用B,
              
       decode(rh_split(a.输出参数, '|', 31) + rh_split(a.输出参数, '|', 32),
              a.总费用,
              rh_split(a.输出参数, '|', 32),
              rh_split(a.输出参数, '|', 33)) as 费用C,
              
       decode(rh_split(a.输出参数, '|', 31) + rh_split(a.输出参数, '|', 32),
              a.总费用,
              rh_split(a.输出参数, '|', 33),
              rh_split(a.输出参数, '|', 34)) as 费用D
  from tableName a

就是用decode 重复判断这个规律,看起来就很复杂,这种情况能优化吗?这样的代码又长又臭,而且可能同一个值要计算好几次?

  • 写回答

1条回答 默认 最新

  • AllenGd 大数据领域优质创作者 2023-06-14 15:03
    关注
    
    WITH split_params AS (
    SELECT
        a.总费用,
        rh_split ( a.输出参数, '|', 30 ) AS 费用 A_1,
        rh_split ( a.输出参数, '|', 31 ) AS 费用 A_2,
        rh_split ( a.输出参数, '|', 32 ) AS 费用 B_1,
        rh_split ( a.输出参数, '|', 33 ) AS 费用 C_1,
        rh_split ( a.输出参数, '|', 34 ) AS 费用 D_1 
    FROM
        tableName a 
        ) 
    SELECT
    CASE
        WHEN
        费用 A_2 + 费用 B_1 = 总费用 THEN
        费用 A_1 ELSE 费用 A_2 
    END AS 费用 A,
    CASE
        WHEN 
        费用 A_2 + 费用 B_1 = 总费用 THEN
        费用 A_2 ELSE 费用 B_1 
        END AS 费用 B,
    CASE
        WHEN 
        费用 A_2 + 费用 B_1 = 总费用 THEN
        费用 B_1 ELSE 费用 C_1 
        END AS 费用 C,
    CASE
        WHEN 
        费用 A_2 + 费用 B_1 = 总费用 THEN
        费用 C_1 ELSE 费用 D_1 
        END AS 费用 D 
    FROM
    split_params;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月26日
  • 已采纳回答 6月18日
  • 创建了问题 6月14日

悬赏问题

  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来