Может кто-нибудь сказать мне, почему 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
Спасибо!
Примеры данных и желаемые результаты действительно помогут.
Но скалярный подзапрос — это подзапрос, который возвращает один столбец и ноль или одну строку. Если он возвращает нулевые строки, то значение равно NULL
независимо от выражения в SELECT
. Другими словами, COALESCE()
должен выйти наружу, примерно так:
coalesce( (select . . . . ),
''
)
Включение NULL
в список coalesce()
не является хорошей практикой. Это не нужно и вводит в заблуждение — и всегда игнорируется.