【问题标题】:How do I use UPDATE and JOIN along with CASES in SQL?如何在 SQL 中使用 UPDATE 和 JOIN 以及 CASES?
【发布时间】:2021-10-08 05:02:09
【问题描述】:

这里给出了两个表,

账户表:

Client_ID AccType Balance
C100111001 C 5000.00
C100111001 S 7281.1068
C100111002 C 12300.00
C100111003 C 1200.00
C100111003 V 5000.00
C100112001 C 7600.00
C100113002 C 1300.00
C100113003 C 4500.00

交易表:

Client_ID AccType TransType Amount
C100111001 C R 60.00
C100111001 C D 800.00
C100111001 S D 300.00
C100111001 S R 100.00
C100111002 C D 1000.00
C100111002 C R 40.00
C100111002 C D 500.00
C100111002 C R 80.00
C100111003 C D 1000.00
C100111003 C R 100.00
C100111003 C D 100.00
C100111003 V R 100.00
C100111003 V D 70.00
C100111003 V D 30.00
C100113002 C D 1000.00

问题是编写一个查询,从在这些账户上执行的交易(Transactions Table)中更新 Account Table 中相同账户类型(AccType)的所有客户账户(Client_ID)的余额。在交易表中,我们有两种交易类型“D”和“R”,TransType“D”指的是借方,“R”指的是贷方。

例如,在 Account 和 Transactions 表的第一行中,Client_ID C100111001 的 Acctype 为“C”,余额应更新为 5000+60,因为 Transactions 表中的金额为 TransType='R',这意味着信用。同样,对于“D”,我们将在 Balance 中做减法。

我正在尝试通过将 UPDATE 与 JOIN 和 CASES 一起用于“R”和“D”来编写更新查询,但我无法成功。请帮忙

我的查询:

DECLARE @TransType char
SET @TransType='D'
UPDATE Account 
SET Balance = 
CASE @TransType
     WHEN 'D' THEN Balance - Amount
     ELSE Balance + Amount
END
FROM Transactions
JOIN
Account
ON
Transactions.Client_ID=Account.Client_ID
where Account.AccType=Transactions.AccType

我的结果帐户表:

Client_ID AccType Balance
C100113003 C 4500.00
C100111001 C 4940.00
C100111001 S 2940.00
C100111002 C 11300.00
C100113002 C 300.00
C100112001 C 7600.00
C100111003 V 4900.00
C100111003 C 1100.00

我手动计算出我的结果帐户表未显示正确的余额,可能原因是我无法正确分组 AccType(C、S、V),因此它给了我不正确的余额列值。

【问题讨论】:

  • 提示:CASE TransType WHEN 'C' THEN Balance + Amount WHEN 'D' THEN Balance - Amount END
  • StackOverflow 不是免费的编码服务。你应该try to solve the problem first。请更新您的问题以在minimal reproducible example 中显示您已经尝试过的内容。如需更多信息,请参阅How to Ask,并拨打tour :)
  • 请输入您想要的输出
  • @Barmar 我更新了我的查询,它为 Balance 列提供了不正确的值,但我想要的输出类型现在更清楚了。请看一下,提前谢谢
  • @Meysam Asadi 我最后添加了我的结果表,虽然它显示了不正确的值,因为计算不正确,但您仍然了解输出表的外观。谢谢

标签: mysql sql join sql-update


【解决方案1】:

你的想法基本上是对的,只是有一堆语法错误。

您不需要用户变量,您只需引用表中的列即可。

SET 子句在 JOIN 之后,UPDATE 查询中没有 FROM 子句。

UPDATE Account AS a
JOIN Transactions AS t 
ON t.Client_ID=a.Client_ID
    AND a.AccType=t.AccType
SET a.Balance = 
    CASE t.TransType
         WHEN 'D' THEN a.Balance - t.Amount
         ELSE a.Balance + t.Amount
    END

【讨论】:

    猜你喜欢
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 2010-11-20
    相关资源
    最近更新 更多