Access单查询实现SumIIF需求:按账号聚合U行求和与A行取值
Access单查询实现账号分组统计需求
完全可以通过单查询实现你的需求,不需要拆分查询或导出到Excel处理。你的原SQL问题出在分组逻辑错误,且字段构造不符合目标要求,以下是正确的实现方案:
正确SQL语句
SELECT [TEST].[Account Number] AS [账号ID], SUM(IIF([TEST].[Row Type]='U', [TEST].[Value], 0)) AS [U行值总和], MAX(IIF([TEST].[Row Type]='A', [TEST].[Value], NULL)) AS [A行值] FROM [TEST] GROUP BY [TEST].[Account Number]
逻辑说明
- 分组逻辑:仅按
Account Number分组,保证每个账号只返回一行结果 - U行总和计算:用
SUM(IIF(...))筛选出Row Type为U的行对Value求和,非U行补0,不影响最终总和 - A行值提取:利用你提到的「A行每个账号唯一」的特性,用
MAX()(或FIRST()/MIN()均可)提取对应账号的A行Value,因为每个账号只有一条A行,聚合函数会直接返回该值
预期结果(对应你的示例数据)
| 账号ID | U行值总和 | A行值 |
|---|---|---|
| 123456789 | 50.00 | 50.00 |
| 987654321 | 100.00 | 100.00 |
原SQL问题分析
你之前尝试的SUM(IIF)逻辑本身是对的,但原SQL错误地将Row Type加入了GROUP BY,导致每个账号被拆分成A、U两行;同时SELECT语句的字段选择和别名设置混乱,才会得到不符合预期的4行结果。
内容的提问来源于stack exchange,提问作者Stuart
相关产品推荐
相关产品推荐

