在MS Access中实现类似Excel COUNTIFS功能的客户产品购买次数统计查询
在MS Access中实现类似Excel COUNTIFS功能的客户产品购买次数统计查询
嗨,我来帮你搞定这个在Access里统计客户产品购买次数的问题~其实用Access自带的工具就能轻松实现类似Excel COUNTIFS的效果,我给你两种实用的方法,你可以根据自己的习惯选:
首先先把你的原始数据整理成清晰的表格,方便我们对照结果:
| Customer | Products |
|---|---|
| 55555 | Apple |
| 55555 | Pear |
| 12345 | Pear |
| 12345 | Grape |
| 12345 | Grape |
| 22222 | Grape |
| 44444 | Apple |
| 44444 | Apple |
| 44444 | Apple |
| 44444 | Apple |
| 54544 | Pear |
| 54544 | Apple |
方法一:用交叉表查询(可视化操作,新手友好)
交叉表是Access专门为这种"按行按列统计"设计的功能,操作超简单:
- 打开你的Access数据库,切换到创建选项卡,点击查询设计
- 把你的客户产品表添加到查询窗口,然后关闭"显示表"对话框
- 在顶部的设计选项卡中,找到"查询类型"组,点击交叉表按钮
- 接下来设置三个查询字段:
- 第一个字段选
Customer,在"交叉表"下拉框里选「行标题」——这样每个客户会单独占一行 - 第二个字段选
Products,在"交叉表"下拉框里选「列标题」——每个产品会自动变成一列 - 第三个字段随便选一个(比如还是
Products),在"总计"下拉框里选「Count」,"交叉表"下拉框里选「值」——这一步就是统计购买次数
- 第一个字段选
- 点击工具栏上的运行按钮(那个感叹号图标),就能看到结果啦!如果有些客户没买某个产品,对应的单元格会显示
Null,你可以用Nz函数把它改成0,比如把统计字段改成Nz(Count(Products), 0)就行
方法二:直接写SQL语句(适合喜欢手动编码的朋友)
如果你习惯写SQL,直接用下面的语句也能得到一样的结果,记得把[你的表名]换成你实际的表名称:
TRANSFORM Nz(Count(Products), 0) AS 购买次数 SELECT Customer FROM [你的表名] GROUP BY Customer PIVOT Products;
要是你不需要把Null转成0,去掉Nz(...)里的部分就行:
TRANSFORM Count(Products) AS 购买次数 SELECT Customer FROM [你的表名] GROUP BY Customer PIVOT Products;
补充:类似COUNTIFS逻辑的聚合查询
如果你想完全对应Excel COUNTIFS的思路,也可以用条件统计的方式写SQL,不过这种方式需要手动指定每个产品:
SELECT Customer, Count(IIf(Products='Apple', 1, Null)) AS 苹果购买次数, Count(IIf(Products='Pear', 1, Null)) AS 梨子购买次数, Count(IIf(Products='Grape', 1, Null)) AS 葡萄购买次数 FROM [你的表名] GROUP BY Customer;
这种方法的小缺点是:以后新增产品的话,得手动修改SQL加新的字段,而交叉表查询会自动识别新的产品列,灵活性更高。
备注:内容来源于stack exchange,提问作者David Anton
相关产品推荐
相关产品推荐

