首页 > 解决方案 > 如何计算两个表中帐户的金额总和取决于第一个字符部分

问题描述

我有两张表 tblaccounts + tblamounts

tblaccounts我有 AccID、AccCode、AccType(主或子)字段

tblamounts我有 AccID、TheAmount 字段

我需要计算每个帐户的总金额,但角色就像您在下一个数据中看到的那样:

+---------+--------+---------+
| AccCode | Amount | AccType |
+---------+--------+---------+
| 1       | 2400   | Main    |
+---------+--------+---------+
| 11      | 1600   | Main    |
+---------+--------+---------+
| 111     | 100    | Sub     |
+---------+--------+---------+
| 112     | 1000   | Sub     |
+---------+--------+---------+
| 113     | 500    | Sub     |
+---------+--------+---------+
| 12      | 800    | Main    |
+---------+--------+---------+
| 121     | 500    | Sub     |
+---------+--------+---------+
| 122     | 300    | Sub     |
+---------+--------+---------+

(Main)12 的金额 = Sub121(500)+Sub122(300) = 800

(Main)11 的金额 = Sub111(100)+Sub112(1000)+Sub113(500) = 1600

(Main)1 的金额 = Main11(1600)+Main12(800) = 2400

我试图根据第一个数字对每个帐户求和,所以如果我想获得 AccCode(1) 的总和,我必须找到以 1 开头的帐户并将其所有金额相加,但是如何检查包含超过1个字符,比如12,我要给金额121 + 122

更新:我使用了下一个代码:

SELECT AccCode, 
(
SELECT SUM(TheAmount) xResult FROM tblamounts
INNER JOIN tblaccounts ON tblaccounts.AccID = tblamounts.AccID 
WHERE AccCode LIKE xacc.AccCode%
) FROM tblaccounts xacc

标签: mysqlsql

解决方案


如果我理解正确,你想要:

select a.*,
       (select sum(am.amounts)
        from amounts am
        where am.accId like concat(a.accId, '%')
       )
from accounts a;

也就是说,对以给定帐户的相同字符开头的所有帐户的值求和。


推荐阅读