微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MS Access SQL - 不同的记录和相关值的计数

如何解决MS Access SQL - 不同的记录和相关值的计数

我遇到了聚合查询的问题。我有两个表,MainA 和 MainC。我只想在 MainA 中选择唯一值,然后计算 MainC 中与这些值匹配的次数。我不关心(现在)在 MainC 中出现但不在 MainA 中的值。我有一个简单的表达式,主要是工作,它在这里

SELECT disTINCT TBMainA.Field1,Count(TBMainC.MCField1) AS CountOfMCField1
FROM TBMainA 
LEFT JOIN TBMainC ON TBMainA.Field1 = TBMainC.MCField1
GROUP BY TBMainA.Field1;

然而,问题是如果 MainA 中出现的值大于 value,则表达式会重复计算 MainC 中的值(推测是因为 MainA 中有两种情况要计算)。我怀疑这与我开始聚合的位置或我如何分组有关,但我已经在这个问题上敲了一下头,还没有产生一个可行的解决方案。以下是一些示例数据以及现在的查询输出(MAID 和 MCID 是每个表的键):

主A

MAID Field1
1 苹果
2 橘子
3 葡萄柚
4 辣椒
5 猕猴桃
6 西红柿
8 鳄梨
9 香蕉
10 苹果

主C

MCID MCField1
1 香蕉
2 辣椒
3 辣椒
4 西红柿
5 苹果
6 菠菜
7 羽衣甘蓝
8 苹果
9 橘子

查询输出

Field1 CountOfMCField1
苹果 4
鳄梨 0
香蕉 1
葡萄柚 0
猕猴桃 0
橘子 1
辣椒 2
西红柿 1

欢迎提出建议,感谢您的帮助...!

解决方法

对于您的特定查询,计算 MCField1 的唯一值将是:

SELECT Field1,COUNT(MCField1) AS CountOfMCField1
FROM (SELECT DISTINCT TBMainA.Field1,TBMainC.MCField1
      FROM TBMainA LEFT JOIN
           TBMainC
           ON TBMainA.Field1 = TBMainC.MCField1
     ) as AC
GROUP BY Field1;

如果你只是想统计出现的次数,那么:

SELECT TBMainA.Field1,COUNT(*)
FROM TBMainA LEFT JOIN
     TBMainC
     ON TBMainA.Field1 = TBMainC.MCField1
GROUP BY TBMainA.Field1;
     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。