我正在尝试计算剩余余额并将其存储在表中的记录中。尽管这很复杂,因为我需要将其存储在表本身中。这里是一个解释:
帐户表
╔═════════╦═══════╗
║ Account ║ Total ║
╠═════════╬═══════╣
║ A ║ $1000 ║
╠═════════╬═══════╣
║ B ║ $800 ║
╠═════════╬═══════╣
║ C ║ $1200 ║
╚═════════╩═══════╝
Detail_Table
╔═════════╦══════╦══════╦═════════╗
║ Account ║ Line ║ Type ║ Amount ║
╠═════════╬══════╬══════╬═════════╣
║ A ║ 001 ║ E ║ $200.00 ║
╠═════════╬══════╬══════╬═════════╣
║ A ║ 002 ║ E ║ $300.00 ║
╠═════════╬══════╬══════╬═════════╣
║ A ║ 003 ║ E ║ $100.00 ║
╠═════════╬══════╬══════╬═════════╣
║ A ║ 004 ║ R ║ ║
╠═════════╬══════╬══════╬═════════╣
║ B ║ 001 ║ E ║ $300.00 ║
╠═════════╬══════╬══════╬═════════╣
║ B ║ 002 ║ R ║ ║
╠═════════╬══════╬══════╬═════════╣
║ C ║ 001 ║ R ║ ║
╚═════════╩══════╩══════╩═════════╝
我想做的是将与每个帐户匹配的所有金额相加,找到该金额与该帐户的总计之间的差额,然后在“类型”列= R的“金额”列中记录该剩余余额。
因此,例如,帐户A的Type R行将填充$ 400.00,即($ 1000.00-($ 300.00 + $ 200.00 + $ 100.00))。
所以我的结果看起来像:
╔═════════╦══════╦══════╦══════════╗
║ Account ║ Line ║ Type ║ Amount ║
╠═════════╬══════╬══════╬══════════╣
║ A ║ 001 ║ E ║ $200.00 ║
╠═════════╬══════╬══════╬══════════╣
║ A ║ 002 ║ E ║ $300.00 ║
╠═════════╬══════╬══════╬══════════╣
║ A ║ 003 ║ E ║ $100.00 ║
╠═════════╬══════╬══════╬══════════╣
║ A ║ 004 ║ R ║ $400.00 ║
╠═════════╬══════╬══════╬══════════╣
║ B ║ 001 ║ E ║ $300.00 ║
╠═════════╬══════╬══════╬══════════╣
║ B ║ 002 ║ R ║ $500.00 ║
╠═════════╬══════╬══════╬══════════╣
║ C ║ 001 ║ R ║ $1200.00 ║
╚═════════╩══════╩══════╩══════════╝
这是我现在的位置。这是行不通的,并且引发了关于更新我正在读取的同一张表的错误,更不用说我什至不确定我是否正确地解决了这个问题:
UPDATE Detail_Table
INNER JOIN Accounts_Table
ON Detail_Table.Account = Accounts_Table.Account
SET
Detail_Table.Amount = Accounts_Table.Total - (SELECT SUM(Amount) FROM Detail_Table AS TempTable WHERE TempTable.Account = Accounts_Table.Account)
WHERE
Detail_Table.Type = 'R'
AND
Detail_Table.Amount IS NULL;
任何帮助表示赞赏!
最佳答案
进行计算的查询是:
select a.account, ( a.total - coalesce(sum(d.amount), 0) ) as balance
from accounts_table a join
detail_table d
on a.account = d.account and d.type = 'E'
group by a.account, a.total;
有了这个,只需加入:
update detail_table d left join
(select a.account, ( a.total - coalesce(sum(d.amount), 0) ) as balance
from accounts_table a left join
detail_table d
on a.account = d.account and d.type = 'E'
group by a.account, a.total
) b
on d.account = b.account
set d.amount = b.balance
where d.type = 'R';