Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何为空查询赋值_Sql_Oracle - Fatal编程技术网

Sql 如何为空查询赋值

Sql 如何为空查询赋值,sql,oracle,Sql,Oracle,我对Oracle中的查询有问题。如果我的查询返回null,我想指定值-1;如果表中至少有一个值,我想指定ID值。这是我的问题 SELECT IAM_EXP_RESULT_ID FROM (SELECT * FROM IAM_EXP_RESULT ORDER BY START_DATE ASC) WHERE RESULT = 0 AND ROWNUM = 1 上面的查询不返回任何行,因为表为空。我想创建一个变量,在这种情况下分配值-1,或者在至少存在一个值的情况下分配IAM_EXP_RESUL

我对Oracle中的查询有问题。如果我的查询返回null,我想指定值-1;如果表中至少有一个值,我想指定ID值。这是我的问题

SELECT IAM_EXP_RESULT_ID
FROM (SELECT * FROM IAM_EXP_RESULT ORDER BY START_DATE  ASC)
WHERE RESULT = 0 AND ROWNUM = 1

上面的查询不返回任何行,因为表为空。我想创建一个变量,在这种情况下分配值-1,或者在至少存在一个值的情况下分配IAM_EXP_RESULT_ID值

您可以使用
计数
分析功能和
合并

SELECT COALESCE(
         IAM_EXP_RESULT_ID,
         CASE WHEN ct > 0 THEN -1 ELSE NULL END
       ) AS IAM_EXP_RESULT_ID
FROM   (
  SELECT IAM_EXP_RESULT_ID,
         RESULT,
         START_DATE,
         COUNT( your_value_column ) OVER () AS ct
  FROM   IAM_EXP_RESULT r
  UNION ALL
  SELECT -1, 0, NULL, 0 FROM DUAL
  ORDER  BY START_DATE ASC NULLS LAST
)
WHERE  RESULT = 0
AND    ROWNUM = 1

为此,我使用聚合:

SELECT COALESCE(MAX(IAM_EXP_RESULT_ID), -1)
FROM (SELECT *
      FROM IAM_EXP_RESULT
      ORDER BY START_DATE  ASC
     )
WHERE RESULT = 0 AND ROWNUM = 1;
聚合查询始终返回一行,如果没有与之匹配的行,则
NULL
COALESCE()
将用所需值替换该值


注意:您可能希望子查询中的
RESULT=0

如果表中没有行,并且不能使用count(*)或其他聚合函数,则此常规示例以及其他示例将返回值:

SELECT data_length FROM all_tab_cols
  WHERE owner = 'YOU'
   AND table_name = 'EMP'
   AND column_name = 'ENAMES'
UNION ALL
 SELECT -1 FROM dual
  WHERE NOT EXISTS
 (
  SELECT data_length FROM all_tab_cols
   WHERE owner = 'YOU'
     AND table_name = 'EMP'
     AND column_name = 'ENAMES'
  )
/

上述查询的结果是-1。顶部部分可能返回行,也可能不返回行。若顶部部分返回行,那个么您将得到它返回的任何内容。如果不是,则得到-1。

Itt听起来像是在寻找带有
CASE
语句的
左连接?但我不是100%清楚。尝试从没有行的表生成行似乎有些奇怪。请尝试使用coalesce:Es。选择合并(IAM_EXP_RESULT_ID,-1)。不。其中
在聚合之前进行计算。这只会导致没有行,并且返回一个
NULL
让rownum=1将是一个不同的故事。OP需要澄清他们的问题,但我们讨论的是两种不同的情况。他们首先说“我想赋值-如果我的查询在表中至少有一个值时返回null,则为1”-如果它返回零行,则查询不会返回
null
,因此返回的一行必须包含一个
null
值,这就是我的注释所涉及的内容。你的是关于他们在最后一段中的“我想创建一个变量来赋值-1”的陈述,这是一个令人困惑的相似但略有不同的要求。