1、下面示例为了说明:NVL(NULLIF(A.SICKBEDID,-1), B.SICKBEDID) 等效于 DECODE(A.SICKBEDID,-1, B.SICKBEDID, A.SICKBEDID)
SELECT NVL(NULLIF(A.SICKBEDID,-1), B.SICKBEDID), DECODE(A.SICKBEDID,-1, B.SICKBEDID, A.SICKBEDID), a.*, b.*
FROM (
SELECT ENCOUNTERID, SICKBEDID , ORDERREQUESTID, ORDERDATE, COMBINEDMEDICATIONREQUESTID, SUM(Amount) AS Amount,Max(REPEATNUMBER) AS REPEATNUMBER, Max(RouteId) AS RouteId, Max(AuthorId) AS AuthorId
FROM PORX.APPLICATIONMEDICINE
GROUP BY ENCOUNTERID, SICKBEDID, ORDERREQUESTID, ORDERDATE, COMBINEDMEDICATIONREQUESTID
) A INNER JOIN PRPA.ENCOUNTER B
ON A.ENCOUNTERID = b.ENCOUNTERID;
2、除了上面3个函数外,还有一个是NVL的扩展,函数NVL2(condition, expression1, expression2):如果条件表达式的值不为NULL,则返回表达式1的值,否则返回表达式2的值,很容易理解。
3、NULLIF函数还有一个很有价值的场景,譬如用在触发器上,如字段的新值与旧值相同跟踪表不做记录或记录NULL,否则记录新值。