如何在Crystal Report中对重复交易号对应的金额实现去重求和
Crystal Report按交易号去重求和实现方法
你需要对两组独立的交易号&金额字段分别做去重统计,以下是两种常用可行方案:
方案1:使用运行总和字段(无需改数据源,适合小数据量场景)
使用前请先将报表数据按对应交易号字段排序,否则相邻行判断逻辑会失效:
统计去重后的Amount1总和
- 打开字段资源管理器,右键「运行总和字段」选择「新建」,命名为
sum_distinct_amount1 - 「要汇总的字段」选择表中的
Amount1字段,计算类型选择「求和」 - 「求值」规则选择「按公式」,点击公式按钮输入以下逻辑后保存:
OnFirstRecord OR {你的表名.Transaction No1} <> Previous({你的表名.Transaction No1}) - 「重置」规则选择「从不」(如果是按分组统计就选择对应分组的「组更改」)
统计去重后的Amount2总和
和上述操作逻辑一致,仅修改对应字段即可:
- 新建运行总和字段
sum_distinct_amount2 - 汇总字段选
Amount2 - 求值公式改为:
OnFirstRecord OR {你的表名.Transaction No2} <> Previous({你的表名.Transaction No2}) - 重置规则和Amount1的设置保持一致
方案2:修改数据源查询SQL(性能更优,适合大数据量场景)
如果你的报表数据是通过自定义SQL取数,直接在取数阶段完成去重,计算效率更高:
- 取Amount1去重求和的SQL示例:
SELECT SUM(Amount1) AS sum_amount1 FROM (SELECT DISTINCT [Transaction No1], Amount1 FROM 你的表名) t1 - 取Amount2去重求和的SQL示例:
SELECT SUM(Amount2) AS sum_amount2 FROM (SELECT DISTINCT [Transaction No2], Amount2 FROM 你的表名) t2
两种方案计算结果和你示例的预期结果完全匹配:Amount1求和为13000,Amount2求和为12500。
内容的提问来源于stack exchange,提问作者Lawrencxe
相关产品推荐
相关产品推荐

