如何使用Oracle Case Statement测试不平等

AWh*_*ley 3 sql oracle case-statement

这很好用:

    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  ;
Run Code Online (Sandbox Code Playgroud)

但我需要做更多这样的事情:

    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 ;
Run Code Online (Sandbox Code Playgroud)

建议?

Mur*_*nik 7

case支持评估布尔条件的语法.它不像你想要的那样干净,因为你需要重新编写每个表达式,但它完成了工作:

select 
  case
    when (1+2) > 200 then 'high'
    when (1+2) < 100 then 'low'
    else                  'medium'
  end hi_med_low
from dual ;
Run Code Online (Sandbox Code Playgroud)

一种可能的缓解措施可能是为子公式使用子查询,因此您只需编写一次:

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);
Run Code Online (Sandbox Code Playgroud)