Oracle - 没有返回/插入值的行

时间:2013-12-17 09:18:36

标签: sql null coalesce nvl

我正在尝试创建一个报告,该报告检查返回数据的SQL语句,并根据结果集填充Y / N列。

我尝试使用NVL功能,但我认为我完全忽略了这个功能的要点 - 下面的查询不会返回任何行,所以没有'null值'这就是为什么NVL函数在我的情况下不起作用 - 我已经尝试过COALESCE,但我无法理解嵌入式SELECT并调用虚拟'DUAL'表。

在“没有返回行”的情况下,是否有一种方法可用于提供值?

SELECT
TO_CHAR(AR_WD_EVENTS.EVENT_ID)
FROM
AR_WD_EVENTS, AR_PI_SITE_BLOCKS
WHERE AR_WD_EVENTS.EVENT_BLOCK_ID = {!AR_PI_SITE_BLOCKS.SITE_ID}
AND TO_CHAR(AR_WD_EVENTS.EVENT_CONTRACT_ID) = 1555

这是QB语法 - '6。 Shutters - Event'是上面SQL查询的名称,基本上我希望SQL语句返回相应的'Event ID',如果它没有找到'Event ID',则给出NULL / Zero / NA值,所以我可以在下面的QBF语句中使用它 - 因为它的SQL查询工作正常,但只有当有值要返回时。

$QBFvalue = 'Y';

if ({%6. Shutters - Event} = 'N/A') $QBFvalue = 'N';

return $QBFvalue;

非常感谢

1 个答案:

答案 0 :(得分:1)

如果你总是得到一个(单个事件id)或零结果,你可以使用MAX函数:

SELECT
MAX(TO_CHAR(AR_WD_EVENTS.EVENT_ID))
FROM
AR_WD_EVENTS, AR_PI_SITE_BLOCKS
WHERE AR_WD_EVENTS.EVENT_BLOCK_ID = {!AR_PI_SITE_BLOCKS.SITE_ID}
AND TO_CHAR(AR_WD_EVENTS.EVENT_CONTRACT_ID) = 1555

当没有匹配的行时,MAX函数将返回Null,当有一个匹配的行时,它将返回EVENT_ID