Coalesce ne fonctionne pas dans une jointure de mise à jour

J'ai une requête de mise à jour où j'essaie de find l'intérêt net de plusieurs counts sur trois repositorys de tables de transactions différentes, les controls et les inputs générales. Le problème que je rencontre est lorsque l'une de ces tables n'a pas d'inputs pour un numéro de prêt sur un count d'intérêt, la sélection ne renvoie rien et affiche ensuite une valeur nulle dans la table de production. Négation des autres tables si elles returnnent des lignes du count d'intérêts. Si les trois tables ont une ligne pour l'intérêt, la requête fonctionne correctement.

Voici le code:

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 

Donc, une mise à jour de résultat inccorect ressemble
T1Amount: 496,08
T2Amount:
T3Amount: 373,92
Intérêt Spread: NULL

J'ai fait pas mal de searchs sur ce site, mais je n'ai pas pu appliquer votre sagesse à mon problème spécifique, donc toute aide serait grandement appréciée.

Déplacez votre instruction COALESCE à l'extérieur de JOIN et supprimez-la des sous-requêtes:

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

Le problème est que vos sous-requêtes ne renvoient aucun résultat, donc la fusion à l'intérieur de celle-ci ne peut pas être appliquée au champ. En l'utilisant en dehors de la jointure externe, vous vous assurez que si le résultat est nul, il se convertit correctement.