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

如何在MS Access SQL中连接表并对连接列求和

需求说明

我有三张表,结构和数据如下:

Table1(ID唯一)

IDweight
1050105873012
1050206083216
1050406394145
1050706603828

Table2

IDexpense_1
105010587309752
10501058730457
10504063941238
105070660389570

Table3

IDexpense_2
10501058730342
10502060832745
105040639418768
10502060832672

需要获取Table1的所有行,同时对每个ID对应的expense_1和expense_2求和,无对应数据时显示0,期望结果如下:

IDweightexpense_1expense_2
105010587301210209342
105020608321601417
10504063941452388768
105070660382895700

尝试常规查询后结果错误,求解决办法。


解决方案

直接关联Table2和Table3会出现笛卡尔积问题(比如某ID在两张表都有多行时,结果会重复计算),正确做法是先分别对Table2、Table3按ID求和,再与Table1做左关联,最后用COALESCE将NULL替换为0。

SQL查询语句

SELECT 
    t1.ID,
    t1.weight,
    COALESCE(t2.total_expense1, 0) AS expense_1,
    COALESCE(t3.total_expense2, 0) AS expense_2
FROM Table1 t1
LEFT JOIN (
    SELECT ID, SUM(expense_1) AS total_expense1
    FROM Table2
    GROUP BY ID
) t2 ON t1.ID = t2.ID
LEFT JOIN (
    SELECT ID, SUM(expense_2) AS total_expense2
    FROM Table3
    GROUP BY ID
) t3 ON t1.ID = t3.ID
ORDER BY t1.ID;

关键说明

  1. 子查询聚合:先对Table2、Table3按ID分组求和,避免直接关联时的笛卡尔积导致求和结果错误。
  2. 左关联保留全量数据:使用LEFT JOIN确保Table1的所有行都被保留,不受Table2/Table3数据存在性影响。
  3. NULL值替换:COALESCE函数将无对应数据时的NULL值替换为0,匹配期望结果格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 23:47:31