首页 > 解决方案 > 如果没有记录计数,则显示零 - ORACLE SQL 查询

问题描述

error_message下面的 Oracle 查询给出了和是否有任何不同的错误Serial_num

如果有零或无Different error计数而不是显示空白/空结果。我怎样才能看到这样的输出?我尝试过NVL(error_message,0)COALESCE (Sum(total),0)没有得到所需的输出。

预期输出

1   Different Errors:       0

Oracle SQL 查询:

SELECT 
  1 as Index_Num, 
  CONCAT('Different Errors:  ', error_message || '# ' || serial_num), 
  SUM(total) 
FROM ( 
  SELECT error_message, serial_num, COUNT(*) total 
  FROM Table1 
  WHERE error_message NOT LIKE '%INVALID%' 
  GROUP BY error_message, serial_num
) 
GROUP BY error_message, serial_num

标签: sqloracleplsql

解决方案


CTE为子查询创建一个并使用UNION ALLwithNOT EXISTS来覆盖CTE不返回任何行的情况:

WITH cte AS (
  SELECT error_message, serial_num, COUNT(*) total 
  FROM Table1 
  WHERE error_message NOT LIKE '%INVALID%' 
  GROUP BY error_message, serial_num
)
SELECT 
  1 as Index_Num, 
  CONCAT(
    'Different Errors:  ', 
    list_agg(error_message || '# ' || serial_num) within group (order by error_message)
  ), 
  SUM(total) 
FROM cte
UNION ALL
SELECT 1, 'Different Errors:  ', 0
FROM dual
WHERE NOT EXISTS (SELECT 1 FROM cte)

推荐阅读