这很好用:
select
case (1+2) -- (or_some_more_complicated_formula_yielding_a_numeric_result)
when 200 then '200'
when 100 then '100'
else 'other'
end hi_med_low
from dual ;
但我需要做更多这样的事情:
select
case (1+2) -- (or_some_more_complicated_formula_yielding_a_numeric_result)
when greater than 200 then 'high'
when less than 100 then 'low'
else 'medium'
end hi_med_low
from dual ;
建议?
答案 0 :(得分:7)
case
支持评估布尔条件的语法。它并不像你想要的那样干净,因为你需要重新编写每个表达式,但它完成了工作:
select
case
when (1+2) > 200 then 'high'
when (1+2) < 100 then 'low'
else 'medium'
end hi_med_low
from dual ;
一种可能的缓解措施可能是为子公式使用子查询,因此您只需编写一次:
select
case
when formula > 200 then 'high'
when formula < 100 then 'low'
else 'medium'
end hi_med_low
from (select (1+2) AS formula from dual);
答案 1 :(得分:4)
是的,请使用CASE WHEN
:
CASE
WHEN some_formula > 200 THEN 'High'
WHEN some_formula < 100 THEN 'Low'
ELSE 'Medium'
END
答案 2 :(得分:2)
您可以在WHEN子句中放置复杂的表达式,或者如果需要,甚至可以调用函数。如果需要,您还可以在THEN子句中执行复杂的表达式。所以这样的事情很容易实现:
SELECT CASE
WHEN a + b > 200 THEN
a + b + c
WHEN a + b <= 200 THEN
a + b + d
END