Oracle Coalesce返回空白

时间:2016-06-16 09:41:40

标签: sql oracle coalesce

我有以下查询,它使用coalesce来返回具有特定代码的日历的ID

 SELECT COALESCE(SD_CALENDAR.ID,0) FROM SD_CALENDAR WHERE SD_CALENDAR.CODE = 'BOER';

但是当我运行这个时,我得到一个空白列,而不是0.我需要更改什么来使我的查询工作?

1 个答案:

答案 0 :(得分:2)

你说你的表中没有行匹配你的查询,所以当没有匹配时你试图返回0,而不是根本不返回数据。

如果NAME是唯一的,那么您可以使用聚合来实现此目的:

SELECT COALESCE(MAX(SD_CALENDAR.ID),0) FROM SD_CALENDAR WHERE SD_CALENDAR.CODE = 'BOER';

MAX()将始终返回一行;如果有匹配则无论如何都是单个ID,如果没有,它将为空 - 然后你可以合并为零。

如果NAME不是唯一的并且您期望返回多个值,那么您可以使用union来在没有匹配时提供零值:

SELECT COALESCE(SD_CALENDAR.ID,0) FROM SD_CALENDAR WHERE SD_CALENDAR.CODE = 'BOER'
UNION ALL
SELECT 0 FROM DUAL WHERE NOT EXISTS (
  SELECT COALESCE(SD_CALENDAR.ID,0) FROM SD_CALENDAR WHERE SD_CALENDAR.CODE = 'BOER'
);

根据您正在做的事情,可能更好/更容易让您的应用程序处理无数据的结果并用零替换。