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
不是一个好习惯。这是不必要的和误导性的——而且总是被忽略。
有人可以告诉我为什么 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
不是一个好习惯。这是不必要的和误导性的——而且总是被忽略。