我正在尝试将旧的Microsoft Access报表转换为Crystal报表。除了这个最后的小细节之外,我的一切都很完美。 Access报告在if语句中为报告中的一个字段使用DSUM函数。
经过多次搜索,我确定CR没有类似的东西。
这基本上就是我正在处理的事情。
我有一份提案报告。在报告的详细信息中,我打印了数量,描述和几个价格字段。
数据看起来像这样:
Proposalnum Partitem RolltoItem Unitprice
18611 ............. 1 .......... NULL ........ 0.00
18611 ............. 2 ......... NULL ....... 17225.92
18611 ............ 3 ............ 2 ............ 156.90
18611 ............ 4 ............. 2 ............ 482.05
我需要做的是当我打印特定部件时,我需要查询其余记录,以找到rolltoitem字段中具有匹配编号的部件,并将unitprice添加到我正在打印的部件中
所以在这个例子中,当我打印partitem#2时,我需要将第3部分和第4部分的156.90和482.05添加到17225.92,所以我打印的总数为17864.87。
有没有办法做到这一点?
答案 0 :(得分:0)
据我所知,没有这样的功能。
但我会尝试这个。
一般的想法是:按ProposalNum对数据进行分组,并使用子报告选择“子行”并将“子项价格”相加。
详细说明:
这是一个理论上的解决方案。我希望它能指出正确的方向。
答案 1 :(得分:0)
如果您尝试将Rolltoitem中具有相同值的所有项目的Unitprice列相加,则可以使用SQL Expression Field执行此操作。代码看起来像这样。我的Where子句可能需要调整,因为我不确定你的数据库结构是什么样的。
(
Select Sum("YourDataBaseTableName"."Unitprice")
From YourDataBaseTableName
Where "YourDataBaseTableName"."Rolltoitem" = *currentRolltoitemValue*
)
根据您使用的数据库类型,SQL表达式字段的语法也可能不同。我提供的语法非常通用,但应该适用于SQL Server。
编辑:添加示例并说明其工作原理。
这是我在水晶报表中的一个SQL表达字段,它打印出已装运货物的提单。
(
Select Sum("SHIPMENTS"."PALLET_COUNT")
From SHIPMENTS
Where "SHIPMENTS"."BOL_ID" = "BOL"."ID"
)
在我的数据库中,BOL表是起点。单个BOL可以包含一个或多个装运,并且单个装运可以包含一个或多个产品。 顶级分组在BOL.ID上。 PALLET_COUNT只能在每个货单上找到一次。我还对详细信息部分中的数据进行了排序要求,导致我无法使用“运行总计字段”。
这允许包含2个装运的BOL包含总共3个产品,如下所示:
BOL.ID SHIPMENTS.ID SHIPMENTS.BOL_ID PALLET_COUNT PRODUCT.ID
1 10 1 2 XXX
1 9 1 1 YYY
1 10 1 2 ZZZ
此BOL的正确PALLET_COUNT应为3,因为PRODUCTS XXX和ZZZ属于同一个SHIPMENTS,而PALLET_COUNT由于与产品的关系而重复。