MySQL填写余额
MySQL Fill in the Remaining Balance
我正在尝试计算余额并将其存储在我的 table 的记录中。它很复杂,因为我需要存储它的地方是 table 本身。这是一个解释:
Accounts_Table
╔═════════╦═══════╗
║ Account ║ Total ║
╠═════════╬═══════╣
║ A ║ 00 ║
╠═════════╬═══════╣
║ B ║ 0 ║
╠═════════╬═══════╣
║ C ║ 00 ║
╚═════════╩═══════╝
Detail_Table
╔═════════╦══════╦══════╦═════════╗
║ Account ║ Line ║ Type ║ Amount ║
╠═════════╬══════╬══════╬═════════╣
║ A ║ 001 ║ E ║ 0.00 ║
╠═════════╬══════╬══════╬═════════╣
║ A ║ 002 ║ E ║ 0.00 ║
╠═════════╬══════╬══════╬═════════╣
║ A ║ 003 ║ E ║ 0.00 ║
╠═════════╬══════╬══════╬═════════╣
║ A ║ 004 ║ R ║ ║
╠═════════╬══════╬══════╬═════════╣
║ B ║ 001 ║ E ║ 0.00 ║
╠═════════╬══════╬══════╬═════════╣
║ B ║ 002 ║ R ║ ║
╠═════════╬══════╬══════╬═════════╣
║ C ║ 001 ║ R ║ ║
╚═════════╩══════╩══════╩═════════╝
我想做的是对每个账户匹配的所有金额求和,找出该总和与账户总计之间的差额,然后在类型列 = R 的金额列中记录剩余余额.
因此,例如,账户 A 的类型 R 行将填充 $400.00,即 ($1000.00 - ($300.00 + $200.00 + $100.00))。
所以我的结果看起来像:
╔═════════╦══════╦══════╦══════════╗
║ Account ║ Line ║ Type ║ Amount ║
╠═════════╬══════╬══════╬══════════╣
║ A ║ 001 ║ E ║ 0.00 ║
╠═════════╬══════╬══════╬══════════╣
║ A ║ 002 ║ E ║ 0.00 ║
╠═════════╬══════╬══════╬══════════╣
║ A ║ 003 ║ E ║ 0.00 ║
╠═════════╬══════╬══════╬══════════╣
║ A ║ 004 ║ R ║ 0.00 ║
╠═════════╬══════╬══════╬══════════╣
║ B ║ 001 ║ E ║ 0.00 ║
╠═════════╬══════╬══════╬══════════╣
║ B ║ 002 ║ R ║ 0.00 ║
╠═════════╬══════╬══════╬══════════╣
║ C ║ 001 ║ R ║ 00.00 ║
╚═════════╩══════╩══════╩══════════╝
这是我现在所在的位置。这不起作用,并且在更新我正在阅读的 table 时抛出错误,更不用说我什至不确定我是否正确地解决了这个问题:
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';
我正在尝试计算余额并将其存储在我的 table 的记录中。它很复杂,因为我需要存储它的地方是 table 本身。这是一个解释:
Accounts_Table
╔═════════╦═══════╗
║ Account ║ Total ║
╠═════════╬═══════╣
║ A ║ 00 ║
╠═════════╬═══════╣
║ B ║ 0 ║
╠═════════╬═══════╣
║ C ║ 00 ║
╚═════════╩═══════╝
Detail_Table
╔═════════╦══════╦══════╦═════════╗
║ Account ║ Line ║ Type ║ Amount ║
╠═════════╬══════╬══════╬═════════╣
║ A ║ 001 ║ E ║ 0.00 ║
╠═════════╬══════╬══════╬═════════╣
║ A ║ 002 ║ E ║ 0.00 ║
╠═════════╬══════╬══════╬═════════╣
║ A ║ 003 ║ E ║ 0.00 ║
╠═════════╬══════╬══════╬═════════╣
║ A ║ 004 ║ R ║ ║
╠═════════╬══════╬══════╬═════════╣
║ B ║ 001 ║ E ║ 0.00 ║
╠═════════╬══════╬══════╬═════════╣
║ B ║ 002 ║ R ║ ║
╠═════════╬══════╬══════╬═════════╣
║ C ║ 001 ║ R ║ ║
╚═════════╩══════╩══════╩═════════╝
我想做的是对每个账户匹配的所有金额求和,找出该总和与账户总计之间的差额,然后在类型列 = R 的金额列中记录剩余余额.
因此,例如,账户 A 的类型 R 行将填充 $400.00,即 ($1000.00 - ($300.00 + $200.00 + $100.00))。
所以我的结果看起来像:
╔═════════╦══════╦══════╦══════════╗
║ Account ║ Line ║ Type ║ Amount ║
╠═════════╬══════╬══════╬══════════╣
║ A ║ 001 ║ E ║ 0.00 ║
╠═════════╬══════╬══════╬══════════╣
║ A ║ 002 ║ E ║ 0.00 ║
╠═════════╬══════╬══════╬══════════╣
║ A ║ 003 ║ E ║ 0.00 ║
╠═════════╬══════╬══════╬══════════╣
║ A ║ 004 ║ R ║ 0.00 ║
╠═════════╬══════╬══════╬══════════╣
║ B ║ 001 ║ E ║ 0.00 ║
╠═════════╬══════╬══════╬══════════╣
║ B ║ 002 ║ R ║ 0.00 ║
╠═════════╬══════╬══════╬══════════╣
║ C ║ 001 ║ R ║ 00.00 ║
╚═════════╩══════╩══════╩══════════╝
这是我现在所在的位置。这不起作用,并且在更新我正在阅读的 table 时抛出错误,更不用说我什至不确定我是否正确地解决了这个问题:
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';