【问题标题】:Coalesce not working in an update join合并在更新连接中不起作用
【发布时间】: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


【解决方案1】:

将您的 COALESCE 语句移到 JOIN 之外并将其从子查询中删除:

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

问题是您的子查询不返回任何结果,因此无法将其合并到该字段中。通过在外部连接之外使用它,您可以确保如果结果为 null,它会正确转换。

【讨论】:

  • 是的。你是对的,非常感谢你 sgeddes 和 cha。车轮在旋转,但是,你去那里要快得多!
猜你喜欢
  • 2021-07-25
  • 1970-01-01
  • 2020-02-22
  • 1970-01-01
  • 2012-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多