如何在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) / z
与x * 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语句中正确放置括号?的主要内容,如果未能解决你的问题,请参考以下文章
Oracle SQL ORA-00907: CASE 语句中缺少右括号错误