我有以下查询,它使用coalesce来返回具有特定代码的日历的ID
SELECT COALESCE(SD_CALENDAR.ID,0) FROM SD_CALENDAR WHERE SD_CALENDAR.CODE = 'BOER';
但是当我运行这个时,我得到一个空白列,而不是0.我需要更改什么来使我的查询工作?
答案 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'
);
根据您正在做的事情,可能更好/更容易让您的应用程序处理无数据的结果并用零替换。