如何为null查询分配值

时间:2018-05-14 12:56:25

标签: 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_RESULT_ID值。

3 个答案:

答案 0 :(得分:0)

您可以使用COUNT分析函数和COALESCE

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

答案 1 :(得分:0)

我为此目的使用聚合:

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

答案 2 :(得分: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。