基于CustomerID分组的多条件Points求和:MS-Access SQL实现需求
嗨,这就给你写出符合需求的MS Access SQL语句,刚好能实现按客户ID分组,分别统计不同交易类型的积分总和👇
MS Access SQL 按客户分组统计不同交易类型积分总和
针对你提供的demo表结构,我们可以用**分组(GROUP BY)**搭配Access专属的IIF函数来实现需求——毕竟Access不支持SQL标准里的CASE WHEN,用IIF就能完美替代。
完整SQL代码
SELECT CustomerID, -- 统计Transfer类型的积分总和 SUM(IIF(Transaction = 'Transfer', Points, 0)) AS TotalTransfer, -- 统计Accrual类型的积分总和 SUM(IIF(Transaction = 'Accrual', Points, 0)) AS TotalAccrual, -- 统计Usage类型的积分总和 SUM(IIF(Transaction = 'Usage', Points, 0)) AS TotalUsage, -- 统计Expiry类型的积分总和 SUM(IIF(Transaction = 'Expiry', Points, 0)) AS TotalExpiry FROM demo -- 按客户ID分组,确保每个客户只出一行统计结果 GROUP BY CustomerID -- 按客户ID排序,结果更规整 ORDER BY CustomerID;
代码逻辑说明
GROUP BY CustomerID:核心分组逻辑,把同一个客户的所有交易记录聚合到一行SUM(IIF(...)):IIF会判断当前交易是否匹配指定类型,匹配就取对应的Points值,不匹配就取0,再用SUM把这些值加起来,得到该类型的总积分- 别名(比如
TotalTransfer)是为了让结果列更直观,你可以根据自己的习惯修改
预期输出结果
执行上面的SQL后,会得到这样的统计表格:
| CustomerID | TotalTransfer | TotalAccrual | TotalUsage | TotalExpiry |
|---|---|---|---|---|
| 1 | 230 | 459 | 306 | 328 |
| 2 | 0 | 532 | 475 | 0 |
| 3 | 194 | 467 | 0 | 0 |
| 5 | 0 | 435 | 0 | 0 |
如果之后需要新增或修改统计的交易类型,只需要复制一行SUM(IIF(...)),修改里面的交易类型值就行,非常灵活。
内容的提问来源于stack exchange,提问作者A.Zaben
相关产品推荐
相关产品推荐

