Переписываю случай когда в sql

Привет, я пытаюсь переписать следующий код, который использует CASE WHEN. Я думал, что я могу вместо этого использовать декодирование или что-то еще?

Код:

create table want as select 
case when (Var1<20 ) then 1 
when (40>Var1>=20 ) then 2 
when (Var1>=40 ) then 3 
else .
end as Var1

2 ответа

Это проще записать как:

create table want as
    select (case when Var1 < 20 then 1 
                 when Var1 < 40 then 2 
                 when Var1 >= 40 then 3 
                 else NULL
            end) as Var1

decode() поддерживает только равенство. Одна из причин, почему мы приветствовали case() когда он был представлен в тот день, это было именно потому, что он позволял нам тестировать больше и меньше чем.

Однако возможно гнездиться decode() звонки и объединить их с другими функциями для достижения того же результата. Это...

select id
     , var1
     , decode(greatest(var1,20), 20, 1, 
              decode(least(var1,40), 40, 3, 2 )) as trans_var
from tab
/

... реализует логику вашего case() заявление:

select id
       , var1
       , (case when Var1 < 20 then 1 
                 when Var1 < 40 then 2 
                 when Var1 >= 40 then 3 
                 else NULL
            end) as trans_var
from tab
/

SQL Fiddle demo.

Другие вопросы по тегам