【问题标题】:How to join and sum tables without losing data?如何在不丢失数据的情况下连接和求和表?
【发布时间】:2026-02-06 07:10:01
【问题描述】:

这是我正在尝试做的一个示例。

Select (t1.count+t2.count) as countTotal from t1 LEFT JOIN t2 ON (t1.ID = t2.ID);

我正在以更大的规模进行此操作,并将许多变量加在一起。我遇到的问题是,如果其中一个 ID 不在我正在组合的表之一中,则该 ID 的整行将返回空白。我的目标是在大部分情况下将两个表加在一起,但是如果其中一行只在一个表中,我怎样才能将这些数据保留在结果查询中?

【问题讨论】:

    标签: sql ms-access join left-join


    【解决方案1】:

    我不得不做一些类似的事情,最后将其全部导出到 Excel 并手动仔细组合数据,我花了大约 4 个小时。不过,这仅适用于 1200 条记录,而我正在使用 5 个表,这些表的匹配列都有不同的名称,非常混乱。 也许您可以尝试使用生成表查询,但是如果您有大量字段,那么这是不可行的,而且我不是 100% 它甚至可以工作。 下一个最佳选择是导出表并将它们导入支持完全外连接的 SQL IDE。然后使用该完全连接创建一个表并将其导出回 Access。这肯定会奏效。但是将表导入 SQL IDE 可能会很棘手,我过去遇到过麻烦。但是,一旦我将它们导入,一切顺利。

    【讨论】:

      【解决方案2】:

      假设任一表中都可能缺少ID,您需要使用FULL OUTER JOIN

      如果一个表中缺少该行,t1.count + t2.count 将返回 Null

      根据the documentation,当值为Null 时,Nz 的默认返回值为0 或零长度字符串。我更喜欢写更清晰的代码,所以我指定了值。

      SELECT Nz(t1.count, 0) + Nz(t2.count, 0) as countTotal
      FROM t1
        FULL OUTER JOIN t2 on t1.ID = t2.ID
      

      【讨论】:

      • 不幸的是,Access 不允许 FULL OUTER JOIN,无论如何要在不重写我所有代码的情况下解决这个问题?
      【解决方案3】:

      使用NZ():

      Select nz(t1.count) + nz(t2.count) as countTotal
      from . . .
      

      这会将NULL 值替换为0,因此+ 有效。否则,如果任何值为NULL,则返回NULL

      【讨论】:

      • 非常感谢,我无法相信找到这个答案有多难!我会试试看它是否有效
      最近更新 更多