mysql填补剩余余额

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

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

科目表

╔═════════╦═══════╗
║ Account ║ Total ║
╠═════════╬═══════╣
║    A    ║ $1000 ║
╠═════════╬═══════╣
║    B    ║  $800 ║
╠═════════╬═══════╣
║    C    ║ $1200 ║
╚═════════╩═══════╝

明细表

╔═════════╦══════╦══════╦═════════╗
║ 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的类型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;

感谢您的帮助!

cpjpxq1n

cpjpxq1n1#

执行计算的查询是:

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';

相关问题