Chr☆s Kwok 的技术笔记

.NET, C#, WPF, WCF, WF, .NetCore & LINQ ... I know how it works because I know why it works ...

博客园 首页 新随笔 订阅 管理

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,否则记录新值。

posted on 2024-09-09 16:06  Chr☆s  阅读(37)  评论(0编辑  收藏  举报