Crystal Reports重复日期问题:如何仅统计单条交付日期的工时汇总?
Crystal Reports重复工时条目处理方案
方法一:组选择公式过滤重复条目
你已经实现分组计数,直接利用组选择就能保留每组第一条记录:
- 确保报表按工单创建主组(若已分组可跳过)
- 创建组内序号公式
@组内序号,公式内容:
(把WhilePrintingRecords; NumberVar count := If {工单字段} = Previous({工单字段}) Then count + 1 Else 1;{工单字段}替换成你实际的工单字段名) - 右键点击工单组 -> 选择「组选择公式」,输入:
{@组内序号} = 1,保存后每组仅保留第一条交付日期对应的工时记录,重复条目会被过滤。
方法二:从数据源层面去重(推荐)
直接在SQL数据源里过滤重复数据,从根源解决问题:
- 打开报表的数据源设置,改用SQL命令模式,输入类似以下SQL(替换成你的表和字段名):
这段SQL会按工单分组,给每个工单的交付日期排序后只取第一条,报表加载的就是无重复的数据。SELECT * FROM ( SELECT 工单编号, 交付日期, 工时, ROW_NUMBER() OVER (PARTITION BY 工单编号 ORDER BY 交付日期) AS rn FROM 你的业务表 ) t WHERE rn = 1
方法三:仅汇总单条工时(不过滤记录)
如果需要保留所有交付日期显示,但汇总时只算一次工时:
- 创建公式
@有效工时:If {@组内序号} = 1 Then {工时字段} Else 0 - 对
@有效工时字段做求和汇总,最终结果就是每个工单仅统计一次工时。
内容的提问来源于stack exchange,提问作者user29920292
相关产品推荐
相关产品推荐

