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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在CASE语句中正确放置括号?相关的知识,希望对你有一定的参考价值。

案例陈述:

(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
答案
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相同。

另一答案

删除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 

以上是关于如何在CASE语句中正确放置括号?的主要内容,如果未能解决你的问题,请参考以下文章

C语言中 For语句后面的括号里有两个分号是啥意思啊?

case语句用法 case语句怎么用

Oracle SQL ORA-00907: CASE 语句中缺少右括号错误

Java中为啥我写switch语句,在case后加break就错误,不加就正确,很困惑,

switch语句的用法?

Java中,switch()括号中的参数是