mysql填补剩余余额

nwsw7zdq  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(407)

我正在尝试计算剩余余额并将其存储在表中的记录中。但这很复杂,因为我需要把它放在table上。下面是一个解释:

科目表

  1. ╔═════════╦═══════╗
  2. Account Total
  3. ╠═════════╬═══════╣
  4. A $1000
  5. ╠═════════╬═══════╣
  6. B $800
  7. ╠═════════╬═══════╣
  8. C $1200
  9. ╚═════════╩═══════╝

明细表

  1. ╔═════════╦══════╦══════╦═════════╗
  2. Account Line Type Amount
  3. ╠═════════╬══════╬══════╬═════════╣
  4. A 001 E $200.00
  5. ╠═════════╬══════╬══════╬═════════╣
  6. A 002 E $300.00
  7. ╠═════════╬══════╬══════╬═════════╣
  8. A 003 E $100.00
  9. ╠═════════╬══════╬══════╬═════════╣
  10. A 004 R
  11. ╠═════════╬══════╬══════╬═════════╣
  12. B 001 E $300.00
  13. ╠═════════╬══════╬══════╬═════════╣
  14. B 002 R
  15. ╠═════════╬══════╬══════╬═════════╣
  16. C 001 R
  17. ╚═════════╩══════╩══════╩═════════╝

我要做的是将与每个账户匹配的所有金额相加,找出该金额与该账户总额之间的差额,然后将剩余余额记录在“金额”列中,其中“类型”列=r。
因此,例如,帐户a的类型r行将填充$400.00,即($1000.00-($300.00+200.00+100.00))。
所以我的结果是:

  1. ╔═════════╦══════╦══════╦══════════╗
  2. Account Line Type Amount
  3. ╠═════════╬══════╬══════╬══════════╣
  4. A 001 E $200.00
  5. ╠═════════╬══════╬══════╬══════════╣
  6. A 002 E $300.00
  7. ╠═════════╬══════╬══════╬══════════╣
  8. A 003 E $100.00
  9. ╠═════════╬══════╬══════╬══════════╣
  10. A 004 R $400.00
  11. ╠═════════╬══════╬══════╬══════════╣
  12. B 001 E $300.00
  13. ╠═════════╬══════╬══════╬══════════╣
  14. B 002 R $500.00
  15. ╠═════════╬══════╬══════╬══════════╣
  16. C 001 R $1200.00
  17. ╚═════════╩══════╩══════╩══════════╝

我现在就在这里。这不起作用,并且在更新我正在读取的同一个表时抛出了一个错误,更不用说我甚至不确定我是否正确地处理了这个问题:

  1. UPDATE Detail_Table
  2. INNER JOIN Accounts_Table
  3. ON Detail_Table.Account = Accounts_Table.Account
  4. SET
  5. Detail_Table.Amount = Accounts_Table.Total - (SELECT SUM(Amount) FROM Detail_Table AS TempTable WHERE TempTable.Account = Accounts_Table.Account)
  6. WHERE
  7. Detail_Table.Type = 'R'
  8. AND
  9. Detail_Table.Amount IS NULL;

感谢您的帮助!

cpjpxq1n

cpjpxq1n1#

执行计算的查询是:

  1. select a.account, ( a.total - coalesce(sum(d.amount), 0) ) as balance
  2. from accounts_table a join
  3. detail_table d
  4. on a.account = d.account and d.type = 'E'
  5. group by a.account, a.total;

有了这个,就加入其中:

  1. update detail_table d left join
  2. (select a.account, ( a.total - coalesce(sum(d.amount), 0) ) as balance
  3. from accounts_table a left join
  4. detail_table d
  5. on a.account = d.account and d.type = 'E'
  6. group by a.account, a.total
  7. ) b
  8. on d.account = b.account
  9. set d.amount = b.balance
  10. where d.type = 'R';
展开查看全部

相关问题