【发布时间】: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