You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Access技术问询:如何按motherID汇总多子表的value字段值

Access多子表按主表ID汇总的正确写法

这种情况我之前也踩过坑——直接把主表和多个子表做连接,很容易因为子表的多行记录产生笛卡尔积,导致汇总数值被重复计算,结果自然不对。下面给你两种靠谱的解决办法:

方法一:先单独汇总各子表,再左连接主表

先给每个子表创建单独的汇总查询,确保每个motherID只对应一条汇总记录,再和主表做左连接就不会有重复问题了。

步骤1:创建子表汇总查询

分别为三个子表创建汇总查询(可以在Access查询设计器里操作,也直接写SQL):

  • 针对tblChildOne的汇总查询(命名为qrySumChild1):
SELECT motherID, Sum(value) AS SumValueChild1
FROM tblChildOne
GROUP BY motherID;
  • 针对tblChildTwo的汇总查询(命名为qrySumChild2):
SELECT motherID, Sum(value) AS SumValueChild2
FROM tblChildTwo
GROUP BY motherID;
  • 针对tblChildThree的汇总查询(命名为qrySumChild3):
SELECT motherID, Sum(value) AS SumValueChild3
FROM tblChildThree
GROUP BY motherID;

步骤2:主表与汇总查询左连接

把主表和这三个汇总查询做左连接,同时用Nz()函数处理空值(避免某个motherID在子表无记录时显示Null):

SELECT 
    m.id AS motherID,
    m.text,
    Nz(sc1.SumValueChild1, 0) AS SumValueChild1,
    Nz(sc2.SumValueChild2, 0) AS SumValueChild2,
    Nz(sc3.SumValueChild3, 0) AS SumValueChild3
FROM 
    ((tblMother m
LEFT JOIN qrySumChild1 sc1 ON m.id = sc1.motherID)
LEFT JOIN qrySumChild2 sc2 ON m.id = sc2.motherID)
LEFT JOIN qrySumChild3 sc3 ON m.id = sc3.motherID;

方法二:直接在主查询中嵌套子查询(更紧凑)

如果不想单独创建子查询,可以直接在主查询里用关联子查询,每个子查询单独计算对应子表的汇总值:

SELECT 
    m.id AS motherID,
    m.text,
    Nz((SELECT Sum(value) FROM tblChildOne WHERE motherID = m.id), 0) AS SumValueChild1,
    Nz((SELECT Sum(value) FROM tblChildTwo WHERE motherID = m.id), 0) AS SumValueChild2,
    Nz((SELECT Sum(value) FROM tblChildThree WHERE motherID = m.id), 0) AS SumValueChild3
FROM tblMother m;

两种方法都能得到你想要的输出格式,而且不会出现汇总错误的问题。如果某个motherID在某个子表里没有记录,Nz()函数会把默认的Null转换成0,让结果更整洁。

内容的提问来源于stack exchange,提问作者Peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 16:37:35