这个问题是我前几天提出的问题的后续问题("Need to find duplicate records but exclude reversed transactions")。
我有一份水晶报告,显示客户的燃料交易。有时会错误地导入重复的事务。如果/当发现此错误时,管理员将撤销交易,从而留下两个原始重复项和一个“否定”交易以进行撤销。例如:
Date; Qty; Value; Reversal
1/14/08 5 20 N
1/14/08 5 20 N
1/14/08 -5 -20 Y
1/20/08 8 56 N
1/22/08 9 62 N
1/22/08 9 62 N
理想情况下,客户只会看到单一交易(或尚未转回的重复交易)。如果交易已被撤销,我们只希望他们看到原始的唯一记录。示例(基于上述数据):
Date; Qty; Value;
1/14/08 5 20
1/20/08 8 56
1/22/08 9 62
1/22/08 9 62
我已经有一个 查询 ,它将以我刚才描述的方式返回数据,但我需要将它与一个需要连接到其他表的水晶报表集成。如果我使用已有的sql,性能是可怕的,所以我试图看看是否可以在Crystal的公式中隐藏重复(反向)事务,而不是使用SQL命令作为连接到其他表的表。 / p>
如果我不清楚,请告诉我。我提前感谢你的智慧!
答案 0 :(得分:2)
逆转总是排在最后吗?如果是这样,您可以使用公式检查下一条记录并有条件地隐藏详细信息部分。
因此,在详细信息部分添加公式以有条件地禁止该部分(如果它是反转记录)或当前记录与后续反转记录匹配:
( {Reversal} = "Y" ) OR
( {Date} = Next({Date}) AND {QTY} = Next({QTY}}) * -1 AND
{Value} = Next({Value}) * -1 AND Next({Reversal}) = "Y" )
如果反转始终匹配,您可以将其简化为:
( {Reversal} = "Y" ) OR
( Next({Reversal}) = "Y" )
答案 1 :(得分:0)
稍微改变数据模型是否为时已晚,以便反转和反转记录并以某种方式标记?我曾经在这样一个系统上工作,其中插入的记录带有'C'(当前)标志,如果反转则更新为'O'(原始),并且反转记录被标记为'R'。所有只想查看当前数据的查询只能添加到WHERE子句中:
AND rec_type = 'C'