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

COALESCE function in OVER statement not working

有人可以告诉我为什么 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

谢谢!

样本数据和预期结果真的很有帮助。

但是标量子查询是 returns 一列和零行或一行的子查询。如果它 returns 零行,那么无论 SELECT 中的表达式如何,该值都是 NULL 。换句话说,COALESCE()需要到外面去,像这样:

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

coalesce() 列表中包含 NULL 不是一个好习惯。这是不必要的和误导性的——而且总是被忽略。