访问查询 - 如何创建一个字段来计算列而不是行的所有匹配记录?

Access Query - How do I create a field that counts all matching records of a column rather than the row?

我不确定如何准确地表达这一点,所以希望我正在尝试做的事情是有意义的。

我在 Access 中有一个交叉表查询,我想要一个字段显示查询结果中与记录中的值匹配的匹配值的总数。例如:

 [ID]       [Name]     [Unit]     [Unit_Total]
   1          A          M1           2
   2          B          M1           2
   3          B          M2           1

对于[Unit_Total],我想统计[Unit]中的值在查询结果中出现的总次数。

我觉得这应该很容易做到。我已经尝试构建各种表达式很长一段时间了,但一直无法弄清楚。

select t.ID,
       t.Name,
       t.Unit,
       (select count(*) from [table] t1 where t1.Unit = t.Unit) as Unit_Total
from [table] t

这是一种快速且易读的方法。如果性能是一个问题,您可以聚合 table 然后将其连接回自身,例如:

select t.ID,
       t.Name,
       t.Unit,
       t2.Unit_Total
from [table] t
join (
    select t.Unit, count(*) as Unit_Total
    from [table] t1
    group by t.Unit
) t2
    on t2.Unit = t.Unit