如何在CASE语句中正确放置括号?

问题描述 投票:-2回答:2

案例陈述:

(CASE WHEN v_cur.order_type != 'STK' 
               AND v_cur.lot_net_cost_flag = 'Y' THEN 0 
      ELSE ( (v_cur.unit_costs_amount * v_cur.line_quantity_ordered) 
               / CASE WHEN v_cur.unit_of_measure_code = 'E' THEN 1 
                      WHEN v_cur.unit_of_measure_code = 'C' THEN 100 
                      WHEN v_cur.unit_of_measure_code = 'M' THEN 1000   
                      ELSE 1 END ) v_dt_unit_of_measure_code_val ) 
 END v_dt_cost_amount
sql plsql
2个回答
1
投票
case
    when v_cur.order_type != 'STK' and v_cur.lot_net_cost_flag = 'Y' then 0
    else v_cur.unit_costs_amount * v_cur.line_quantity_ordered /
        case v_cur.unit_of_measure_code
            when 'E' then 1
            when 'C' then 100
            when 'M' then 1000
            else 1
     end
end as v_dt_cost_amount

CASE语法不需要任何括号。你只需要它们用于混合OR / AND逻辑条件和非默认算术优先级,你在上面的表达式中没有,因为(x * y) / zx * y / z相同。


0
投票

删除v_dt_unit_of_measure_code_val

CASE WHEN v_cur.order_type != 'STK' 
               AND v_cur.lot_net_cost_flag = 'Y' THEN 0 
     ELSE ( (v_cur.unit_costs_amount * v_cur.line_quantity_ordered) 
               / CASE WHEN v_cur.unit_of_measure_code = 'E' THEN 1 
                      WHEN v_cur.unit_of_measure_code = 'C' THEN 100 
                      WHEN v_cur.unit_of_measure_code = 'M' THEN 1000   
                      ELSE 1 END )   
 END v_dt_cost_amount 
© www.soinside.com 2019 - 2024. All rights reserved.