Coalesce не работает в обновлении

У меня есть запрос на обновление, где я пытаюсь найти чистый процент от нескольких учетных записей на трех разных счетах транзакций, чеках и общих записях. Проблема, с которой я сталкиваюсь, заключается в том, что если одна из этих таблиц не имеет записей для номера кредита для учетной записи процента, выбор ничего не возвращает и впоследствии отображает нуль в рабочей таблице. Отрицание других таблиц, если они возвращают строки из учетной записи процентов. Если у всех трех таблиц есть строка для интереса, запрос работает нормально.

Вот код:

UPDATE Prod SET Prod.InterestSpread = (T1.Amount+T2.Amount-T3.Amount) FROM dbo.Production_Pipeline as Prod LEFT JOIN ( SELECT LoanNumber,COALESCE(SUM(JournalLineAmount),0)as Amount FROM dbo.GeneralLedger WHERE (JournalLineAccountRefListID = 'BB0000-1103842703' OR JournalLineAccountRefListID = '800001DA-1202763722') ) AS T1 ON T1.LoanNumber = Prod.LoanNumber LEFT JOIN ( SELECT LoanNumber,COALESCE(SUM(DepositLineAmount),0)as Amount FROM dbo.DepositLedger WHERE ( DepositLineAccountRefListID = 'BB0000-1103842703' OR DepositLineAccountRefListID = '800001DA-1202763722') ) AS T2 ON T2.LoanNumber = Prod.LoanNumber LEFT JOIN ( SELECT LoanNumber,COALESCE(SUM(ExpenseLineAmount),0) AS Amount FROM dbo.CheckLedger WHERE(ExpenseLineAccountRefListID = '800002B4-1308771936' OR ExpenseLineAccountRefListID = 'D30000-1105022008' OR ExpenseLineAccountRefListID = '8000029E-1283179936' OR ExpenseLineAccountRefListID = 'BB0000-1103842703' OR ExpenseLineAccountRefListID = '800001DA-1202763722') ) AS T3 ON T3.LoanNumber = Prod.LoanNumber 

Таким образом, обновление результата inccorect выглядит так:
T1Amount: 496.08
T2Amount:
T3Amount: 373,92
Распространение процентов: NULL

Я провел несколько исследований на этом сайте, но не смог применить свою мудрость к моей конкретной проблеме, поэтому любая помощь здесь была бы очень оценена.

Переместите инструкцию COALESCE за пределы JOIN и удалите ее из подзапросов:

 UPDATE Prod SET Prod.InterestSpread = COALESCE(T1.Amount,0)+COALESCE(T2.Amount,0)-COALESCE(T3.Amount,0) ... 

Проблема заключается в том, что ваши подзапросы не возвращают результатов, поэтому объединяются внутри, которые не могут применяться к полю. Используя его вне внешнего соединения, вы гарантируете, что результат равен нулю, он правильно преобразуется.

  • Вместо триггера для обновления вида несколькими таблицами
  • SQL 2005/8 Quirky update "black arts"
  • Обновление с помощью комплекса Select Query
  • Заявление об обновлении TSQL MS SQL Server 2008 R2
  • SQL Server: динамическое обновление нескольких строк
  • Скопировать данные в существующие строки в одной таблице в SQL Server
  • SQL Server - ограничение UPDATE на определенные столбцы
  • Заявление о обновлении SQL работает в SSMS, но не в SSIS
  • Обновление из таблицы Temp
  • SQL Server: триггер обновления столбца таблицы после другой таблицы вставить или обновить запись
  • SQL Server - обновить столбец, если строка является первой записью в группе
  • Давайте будем гением компьютера.