嗨,我正在尝试重写以下使用 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
嗨,我正在尝试重写以下使用 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
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
/
这更简单地写成:
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