Функция COALESCE в операторе OVER не работает - PullRequest
0 голосов
/ 09 апреля 2019

Может кто-нибудь сказать мне, почему 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

Спасибо! * * 1004

1 Ответ

1 голос
/ 09 апреля 2019

Примерные данные и желаемые результаты действительно помогут.

Но скалярный подзапрос - это подзапрос, который возвращает один столбец и ноль или одну строку.Если он возвращает ноль строк, то значение равно NULL независимо от выражения в SELECT.Другими словами, COALESCE() нужно выйти наружу, что-то вроде этого:

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

Включение NULL в список coalesce() не является хорошей практикой.Это ненужно и вводит в заблуждение - и всегда игнорируется.

...