【问题标题】:MySQL Fill in the Remaining BalanceMySQL 填写余额
【发布时间】:2018-07-10 23:25:57
【问题描述】:

我正在尝试计算剩余余额并将其存储在我的表中的记录中。这很复杂,因为我需要存储它的地方是在表本身中。这是一个解释:

Accounts_Table

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

感谢任何帮助!

【问题讨论】:

    标签: mysql sql balance


    【解决方案1】:

    进行计算的查询是:

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

    【讨论】:

    • 太棒了!只需进行一项更改。此逻辑为我提供了帐户 A 和 B 的正确值,但没有为我提供 C 的结果。稍作修改以使联接成为 LEFT JOIN,它也适用于 C。
    猜你喜欢
    • 2020-04-01
    • 2019-03-28
    • 2012-03-12
    • 2020-10-05
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多