Переписываю случай когда в 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
/