Crystal Reports按OrderID分组后按InvoiceDate排序实现问题
报表按订单分组后按开票日期排序配置方案
不需要删除已有的OrderID分组,现有汇总公式可以直接保留,按以下任意一种方式配置即可实现需求:
- 调整分组排序规则
找到报表中OrderID对应分组的属性配置面板,定位到分组排序设置项:默认配置下分组会按分组键也就是OrderID字段排序,你只需要把排序绑定字段替换为Orders.InvoiceDate,按需选择升序/降序即可。由于单个OrderID只会对应唯一的InvoiceDate,这个调整不会破坏分组聚合逻辑,你写的Sum({Rows.Value}, {Orders.OrderID})公式计算结果完全不受影响。 - 数据集预聚合绕开报表分组限制
如果所用报表工具不支持自定义分组排序字段,可以直接在数据集层面完成聚合和排序,不需要在报表内做分组计算。直接写SQL关联两张表,按订单维度聚合Value,同时提前按开票日期排好序,报表端直接绑定字段输出即可,参考SQL如下:
上述SQL里的SELECT o.InvoiceDate, o.OrderID, SUM(REPLACE(r.Value, ',', '.') * 1) AS Value FROM Orders o LEFT JOIN Rows r ON o.OrderID = r.OrderID GROUP BY o.OrderID, o.InvoiceDate ORDER BY o.InvoiceDateREPLACE是处理示例中逗号作为小数分隔符的字符串格式数值,避免求和时出现类型计算错误,如果你的数据库原生支持该格式数值计算,可以去掉这段转换逻辑。
注意:不要把
InvoiceDate设为外层分组字段,否则同一天开票的多个订单会被合并到同一组,无法输出单订单维度的明细汇总。
内容的提问来源于stack exchange,提问作者Disti
相关产品推荐
相关产品推荐

