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

Access SQL多表Join与Count查询:按地点统计员工及车辆数

没问题,我来帮你搞定这个Access统计查询。咱们的目标是按地点编码(LocID)统计每个地点的员工数和车辆数,下面给你两种方案,按需选择:

方案1:仅统计同时有员工和车辆的地点

如果只需要关注那些既有员工又有车辆的地点,用内连接(INNER JOIN)就可以:

SELECT 
    e.LocID,
    COUNT(DISTINCT e.empID) AS 员工总数,
    COUNT(DISTINCT c.CarID) AS 车辆总数
FROM 
    [Employee Table] e
INNER JOIN 
    [Car Table] c ON e.LocID = c.LocID
GROUP BY 
    e.LocID;

说明:

  • 用COUNT(DISTINCT ...)是为了避免主键重复导致统计错误(虽然理论上empID和CarID作为主键不会重复,但加个保险总没错)
  • 因为表名包含空格,所以必须用方括号[]把表名括起来,这是Access SQL的语法要求
方案2:统计所有地点(含仅员工/仅车辆的地点)

如果需要覆盖所有存在的地点——哪怕某个地点只有员工没有车辆,或者只有车辆没有员工——可以用LEFT JOIN+RIGHT JOIN+UNION来模拟Access不支持的全外连接:

SELECT 
    COALESCE(e.LocID, c.LocID) AS LocID,
    COUNT(DISTINCT e.empID) AS 员工总数,
    COUNT(DISTINCT c.CarID) AS 车辆总数
FROM 
    [Employee Table] e
LEFT JOIN 
    [Car Table] c ON e.LocID = c.LocID
GROUP BY 
    e.LocID

UNION

SELECT 
    COALESCE(e.LocID, c.LocID) AS LocID,
    COUNT(DISTINCT e.empID) AS 员工总数,
    COUNT(DISTINCT c.CarID) AS 车辆总数
FROM 
    [Employee Table] e
RIGHT JOIN 
    [Car Table] c ON e.LocID = c.LocID
GROUP BY 
    c.LocID;

说明:

  • COALESCE()函数用来取两个LocID里非空的那个,确保每个地点都能显示正确的编码
  • UNION会自动合并去重,避免同一个LocID被统计两次
  • 没有员工的地点,员工总数会显示0;没有车辆的地点,车辆总数会显示0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:38:05