OVER语句中的COALESCE函数不起作用

问题描述 投票:0回答:1

有人可以告诉我为什么COALESCE正在开发第一个SELECT而不是其他两个?我仍然在后两个语句中获得NULL值。

(SELECT COALESCE(DEFax, NULL, '') FROM Debtor d WHERE d.DEIsPrimary = 1 AND d.CApKey = c.CApKey) AS FaxNumberOne,
        (SELECT COALESCE(DEFax, NULL, '') FROM (SELECT ROW_NUMBER() OVER (ORDER BY DEpKey ASC) 
            AS rownumber, DEFax FROM Debtor d WHERE d.CApKey = c.CApKey AND d.DEIsPrimary <> 1) 
            AS foo WHERE rownumber = 1) AS FaxNumberTwo,
        (SELECT COALESCE(DEFax, NULL, '') FROM (SELECT ROW_NUMBER() OVER (ORDER BY DEpKey ASC) 
            AS rownumber, DEFax FROM Debtor d WHERE d.CApKey = c.CApKey AND d.DEIsPrimary <> 1) 
            AS foo WHERE rownumber = 2) AS FaxNumberThree

谢谢!

sql coalesce
1个回答
1
投票

样本数据和期望的结果确实会有所帮助。

但是标量子查询是一个返回一列和零行或一行的子查询。如果它返回零行,那么无论NULL中的表达式如何,该值都是SELECT。换句话说,COALESCE()需要走出去,如下所示:

coalesce( (select . . . . ),
          ''
        )

NULL名单中包括coalesce()不是一个好习惯。这是不必要的和误导性的 - 并且总是被忽视。

© www.soinside.com 2019 - 2024. All rights reserved.