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 重复判断这个规律,看起来就很复杂,这种情况能优化吗?这样的代码又长又臭,而且可能同一个值要计算好几次?


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;