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
- обновить поле таблицы базы данных с разделенным запятой списком из объединения
- Как обновить столбец в таблице из другой таблицы на основе условия?
- Как получить пакеты обновления для SQL Server 2008 R2?
- Обновлять только одну запись в SQL Server условно
- Первый экземпляр записи SQL Server - SQL Server
Я провел несколько исследований на этом сайте, но не смог применить свою мудрость к моей конкретной проблеме, поэтому любая помощь здесь была бы очень оценена.
- Как нам подзапрос для обновления значений нескольких столбцов в SQL?
- SQL Server: нельзя связать?
- SQL - группировка по столбцу
- Автоматическая обновленная колонка DateTime SQL Server 2005 - LastUpdated
- SQL UPDATE Самосоединение с комбинированным значением соответствия
- Обновление по предыдущему значению SQL SERVER 2005
- Несколько сообщений об успешном завершении из отчета SQL Server Update
- Что не так с этим оператором обновления SQL
Переместите инструкцию COALESCE
за пределы JOIN
и удалите ее из подзапросов:
UPDATE Prod SET Prod.InterestSpread = COALESCE(T1.Amount,0)+COALESCE(T2.Amount,0)-COALESCE(T3.Amount,0) ...
Проблема заключается в том, что ваши подзапросы не возвращают результатов, поэтому объединяются внутри, которые не могут применяться к полю. Используя его вне внешнего соединения, вы гарантируете, что результат равен нулю, он правильно преобразуется.