oracle:解码并子查询选择结果

问题描述

| 我有一个oracle查询,其中一部分是使用DECODE计算一些值。例如:
SELECT ...,(SELECT DECODE((SELECT 23 FROM DUAL),null,(SELECT 23 FROM DUAL))  
         FROM DUAL) 
  FROM ...
这里的值\“ 23 \”是在运行时计算的,它的联接非常复杂-多个表,使用
PARTITION BY
等。因此,如果值不是\“ 0 \”,我想避免执行相同的子查询。有什么办法可以写这样的东西
SELECT ...,(SELECT DECODE ((SELECT 23 FROM DUAL) as test,test)  
         FROM DUAL) 
  FROM ...
    

解决方法

        这对您有用吗? 我刚刚将\“ 23 \”移到了具有描述性别名的内联表中。
select ...,(
   select 
     decode ( 
            computed_value.val,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
  ...
    ,        要么:
WITH q AS (
SELECT 23 test,16 test2 FROM dual
)
SELECT ...,DECODE(q.test,NULL,q.test) value,CASE WHEN q.test2 = 0 THEN NULL 
            WHEN q.test2 = 16 THEN 1
            ELSE q.test2
       END another_value
  FROM q,...
使您可以在整个主选择中使用查询\“ q \”(允许子查询的地方)。称为WITH子句,通用表表达式或子查询分解。在Oracle-Base.com上了解有关它的更多信息。     ,        对于这种特殊情况,可以使用
NULLIF
函数:
SELECT ...,(SELECT NULLIF((SELECT 23 FROM DUAL),0)  
         FROM DUAL) 
  FROM ...
如果两个参数相等,
NULLIF
函数将返回returns9ѭ,否则它将返回第一个参数。     ,        您可以在from子句中使用子查询,并执行以下操作:
select conf_key,decode(test,test) from (
select conf_key,(select conf_value from config_values where conf_key = \'DOMAINID\') as TEST from config_values )
    ,        最好您使用CASE语句。由于CASE语句就像一系列IF语句,因此仅使用关键字WHEN。 CASE语句从上到下进行评估。如果条件为真,则执行相应的THEN子句,然后执行跳转到END CASE(短路评估)子句。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...