SQL实现:按两个日期分组并对多表连接后的借贷列求和
解决方案:按日期分组并聚合借贷方金额
没问题,我来帮你调整SQL语句,实现按DateDu和DateAu两个日期字段分组,并对多表连接后的Debit(借方)和Credit(贷方)分别求和的需求。
原查询分析
你提供的原SQL只是关联了AffectationAbonnement和DetailAbonnements两张表,返回了指定Abonnement_Id的单条记录的借贷方数据,但没有做分组聚合操作:
select DateDu, DateAu, Det.Debit, Det.Credit, Det.Debit - Det.Credit as 'Solde' from AffectationAbonnement Aff join DetailAbonnements Det on Aff.Abonnement_Id = Det.Abonnements_Id where Abonnement_Id= 8
修改后的分组聚合SQL
下面是调整后的语句,通过GROUP BY和聚合函数SUM()实现你的需求:
select Aff.DateDu, Aff.DateAu, SUM(Det.Debit) as TotalDebit, SUM(Det.Credit) as TotalCredit, SUM(Det.Debit) - SUM(Det.Credit) as 'Solde' from AffectationAbonnement Aff join DetailAbonnements Det on Aff.Abonnement_Id = Det.Abonnements_Id where Abonnement_Id = 8 group by Aff.DateDu, Aff.DateAu
关键说明
- 分组逻辑:
GROUP BY Aff.DateDu, Aff.DateAu确保相同DateDu和DateAu组合的记录会被归为一组 - 聚合计算:
SUM(Det.Debit)和SUM(Det.Credit)分别对每组内的借方、贷方金额求和,得到该日期组的总借贷额 - 余额计算:
SUM(Det.Debit) - SUM(Det.Credit)用分组后的总借方减去总贷方,得到该日期组的余额(Solde) - 处理空值(可选):如果Debit或Credit字段可能存在NULL值,可以用
COALESCE函数避免求和结果为NULL,比如SUM(COALESCE(Det.Debit, 0))
内容的提问来源于stack exchange,提问作者hamza Benlaama
相关产品推荐
相关产品推荐

