我有一个 oracle 查询,其中一部分是使用 DECODE 计算一些值。例如:
SELECT ...,
(SELECT DECODE((SELECT 23 FROM DUAL),
0, null,
(SELECT 23 FROM DUAL))
FROM DUAL)
FROM ...
这里的值“23”是在运行时计算的,它是相当复杂的连接 - 多个表,使用
PARTITION BY
等等。所以如果值不是“0”,我想避免执行相同的子查询。有没有办法写这样的东西SELECT ...,
(SELECT DECODE ((SELECT 23 FROM DUAL) as test,
0, null,
test)
FROM DUAL)
FROM ...
最佳答案
这对你有用吗?
我刚刚将“23”移动到带有描述性别名的内联表中。
select ...,
(
select
decode (
computed_value.val,
0, null,
computed_value.val
)
from
(select 23 as val from dual) computed_value
)
from
...
CASE 语句也可能会增加清晰度,例如:
select
...
,case when computed_value.val = 0
then null
else computed_value.val
end as my_field
from
(select 23 as val from dual) computed_value
...
关于sql - oracle:解码和子查询选择结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6196141/