【发布时间】:2014-09-11 01:01:39
【问题描述】:
我有一个更新查询,我试图在三个不同的交易表存款、支票和一般条目上查找多个账户的净利息。我遇到的问题是,当其中一个表没有利息帐户的贷款编号条目时,选择不返回任何内容,随后在生产表中也显示空值。如果它们从利息帐户返回行,则否定其他表。如果所有三个表都有一行感兴趣,则查询工作正常。
代码如下:
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
所以一个不正确的结果更新看起来像
T1金额:496.08
T2金额:
T3金额:373.92
利差:NULL
我在这个网站上做了一些相当多的研究,但是无法将你的智慧应用到我的具体问题上,所以这里的任何帮助将不胜感激。
【问题讨论】:
-
如果 T2 子查询没有匹配的 LoanNumber 怎么办?在这种情况下你不想使用左连接吗?
-
是的。我同意我改变了它,但我仍然有这个问题。不过这让我思考。由于没有返回任何结果,因此 COALESCE 不会真正生效,因为与贷款编号不匹配。
-
您在下面得到了答案。与左连接一起,您将更新您的
InterestSpread
标签: sql sql-server join sql-update coalesce