Функция COALESCE в операторе OVER не работает

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

Спасибо!

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

Другие вопросы по теме