sql - oracle:解码和子查询选择结果

标签 sql oracle subquery decode

我有一个 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/

相关文章:

sql - 如何自动启动 SQL Server 代理作业

sql - Oracle SQLPlus : print column titles in header when there is no output rows (showing "no rows selected" message)

mysql - 无法从左连接中选择正确的信息

oracle - 调用oracle过程后可以回滚吗?

mysql - 检索拍卖中每个项目的前 2 个出价

MySQL SET 值与子查询

sql - 删除整个表,除了一行

sql - 事务内插入失败,但 sql server 返回 1 行受影响?

mysql - 房间预订查询

sql - ORA-00907 : missing right parenthesis (With Examples)