MS Access父子关联表SQL查询:统计团队数与涂装值总和
MS Access 关联表分组查询适配代码
现有代码的基础语法问题
你编写的初始SQL存在INNER JOIN子句括号未闭合的语法错误,直接执行会触发报错。在原有按TackName分组统计PaintingValue总和的逻辑基础上,可根据实际统计口径选择对应的合法查询代码:
统计口径1:每个TackName分组下关联的不重复TeamName数量
适用于需要统计每个任务对应的协作团队总数的场景,避免同一TeamName的多条关联记录被重复计数:
- 若使用ACE引擎的新版MS Access(2016及以上版本,支持去重计数语法),可直接执行:
SELECT Table1.TackName, Sum(Table2.PaintingValue) AS SumofPaintingValue, Count(DISTINCT Table2.TeamName) AS DistinctTeamCount FROM Table1 INNER JOIN Table2 ON Table1.ID = Table2.fgk GROUP BY Table1.TackName;
- 若使用Jet引擎的旧版MS Access(2007及更早版本,不支持
COUNT(DISTINCT)语法),可通过嵌套子查询实现等效去重逻辑:
SELECT T1.TackName, Sum(T2.PaintingValue) AS SumofPaintingValue, Count(sub.TeamName) AS DistinctTeamCount FROM Table1 AS T1 INNER JOIN Table2 AS T2 ON T1.ID = T2.fgk INNER JOIN ( SELECT DISTINCT fgk, TeamName FROM Table2 WHERE TeamName IS NOT NULL ) AS sub ON T1.ID = sub.fgk GROUP BY T1.TackName;
统计口径2:每个TackName分组下关联的TeamName非空记录总次数
适用于不需要去重、直接统计带TeamName标识的关联子记录总数的场景,全版本MS Access兼容:
SELECT Table1.TackName, Sum(Table2.PaintingValue) AS SumofPaintingValue, Count(Table2.TeamName) AS TeamRecordCount FROM Table1 INNER JOIN Table2 ON Table1.ID = Table2.fgk GROUP BY Table1.TackName;
执行注意事项
- MS Access的SQL兼容模式下,多表INNER JOIN不需要在表关联块外层包裹冗余括号,原代码中多余的起始括号是触发语法错误的核心原因
- 写在
Count()中的字段如果存在NULL值,会自动被排除在统计范围外;如果需要统计分组内的全部关联记录,可将字段名替换为*实现全记录计数
内容的提问来源于stack exchange,提问作者bahman jafari
相关产品推荐
相关产品推荐

