簡體   English   中英

如何為空查詢分配值

[英]How to assign a value to a null query

我在Oracle查詢中遇到問題。 如果我的查詢返回null,並且表中至少有一個值,則我想分配值-1。 這是我的查詢

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值。

您可以使用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

我將聚合用於此目的:

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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM