Mysql 如何计算两个表中科目的金额之和取决于第一个字符部分
我有两张桌子,两张桌子的数量 在tblaccounts中,我有AccID、AccCode、AccTypeMain或Sub字段 在tblamounts中,我有AccID,TheAmount字段 我需要计算每个账户的总金额,但角色如下所示:Mysql 如何计算两个表中科目的金额之和取决于第一个字符部分,mysql,sql,Mysql,Sql,我有两张桌子,两张桌子的数量 在tblaccounts中,我有AccID、AccCode、AccTypeMain或Sub字段 在tblamounts中,我有AccID,TheAmount字段 我需要计算每个账户的总金额,但角色如下所示: +---------+--------+---------+ | AccCode | Amount | AccType | +---------+--------+---------+ | 1 | 2400 | Main | +------
+---------+--------+---------+
| 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 |
+---------+--------+---------+
Main12的金额=Sub121500+Sub122300=800
Main11的金额=Sub111100+Sub1121000+Sub113500=1600
Main1=Main111600+Main12800=2400的金额
我试图根据第一个数字对每个帐户进行求和,因此如果我想获得AccCode1的总和,我必须找到以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
如果我理解正确,您希望:
select a.*,
(select sum(am.amounts)
from amounts am
where am.accId like concat(a.accId, '%')
)
from accounts a;
也就是说,将以给定帐户的相同字符开头的所有帐户的值相加。简易解决方案
编辑:
您所处的轨道是正确的,但您需要汇总到,但不包括帐户本身,只包括它下面的所有帐户
SELECT a.AccCode AS AccountCode,
(SELECT SUM(tblamounts.TheAmount) FROM tblamounts, tblaccounts g
WHERE tblamounts.AccID = g.AccID AND (g.AccCode LIKE CONCAT(a.AccCode,'%')
AND NOT (g.AccCode = a.AccCode AND LOWER(a.AccType) = 'main'))) AS AccountSum ,
a.AccType AS AccountType
FROM tblaccounts a;
因此,在您的结果中,AccountCode 12将是121和122之和。
假设AccountType“Main”没有自己的金额,并且将仅是以类似代码开头的“子”帐户类型的总和。Main1=Main11800+main12600应该是Main1=Main111600+Main12800?这里的层次结构是什么?第一个字符是祖父母,第二个字符是父母,第三个字符是孩子?你能有3个以上的等级吗?@P.Salmon父亲是12,所以121和122是孩子,父亲是1,所以11和12是孩子,所以如果我需要12的数量,我应该找到以12开始的账户并计算它们。我认为你需要重新考虑你的schema@Strawberry如何获取以12开头的帐户作为示例,我以前玩过left fun但有件事我不知道是什么父亲12岁所以121和122是孩子,父亲是1,所以11和12是孩子,所以如果我需要12的数量,那么我应该找到以12开始的帐户,并在获取每个帐户循环的帐户记录时计算我需要的帐户记录,其他帐户以我们想要的帐户开始,这在我看来不正确。您可以将CHARLENGTH与上面的内容结合使用来破解一个正确的答案,但这将是非常困难的ugly@Hamada . . 121人喜欢12%的匹配,所以孩子们也包括在内。这似乎是你想要的。如果你想显示为什么你认为它不起作用,你可以设置一个dbfiddle。@GordonLinoff请查看我在主要帖子中所做的更新,我想我只需要更改partSELECT accode的位置,选择SUMTheAmount xResult FROM TBLAMCOUNTS INTERNAL JOIN tblaccounts ON tblaccounts.AccID=TBLAMONTS.AccID,其中AccCode(如xacc.AccCode%)FROM tblaccounts xacc使用xacc.AccCode时会出现错误
SELECT m1.AccCode, sum(m2.Amount) from tab m1
inner join tab m2 on m2.AccCode LIKE m1.AccCode || "_"
where m1.accType = "Main"
group by m1.AccCode
SELECT a.AccCode AS AccountCode,
(SELECT SUM(tblamounts.TheAmount) FROM tblamounts, tblaccounts g
WHERE tblamounts.AccID = g.AccID AND (g.AccCode LIKE CONCAT(a.AccCode,'%')
AND NOT (g.AccCode = a.AccCode AND LOWER(a.AccType) = 'main'))) AS AccountSum ,
a.AccType AS AccountType
FROM tblaccounts a;