嗨,我试图重写以下使用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
这更简单地写成:
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 小提琴演示。