2

这个问题是我前几天问的一个问题(“需要查找重复记录但排除反向交易”)的后续问题。

我有一个显示客户燃料交易的水晶报表。有时会错误地导入重复的交易。如果/当发现此错误时,管理员将撤消交易,从而留下两个原始副本和一个“负面”交易用于撤消。例子:

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

理想情况下,客户只会看到 SINGLE 交易(或尚未撤销的重复交易)。如果交易被撤销,我们只希望他们看到原始的唯一记录。示例(基于上述数据):

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 命令作为连接到其他表的表。

如果我不清楚,请告诉我。我提前感谢您的智慧!

4

2 回答 2

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" )
于 2008-11-24T23:26:52.430 回答
0

稍微改变数据模型,以便以某种方式反转和反转记录并标记是否为时已晚?我曾经在这样一个系统上工作过,其中插入的记录带有“C”(当前)标志,如果反转则更新为“O”(原始),并且反转记录被标记为“R”。所有只想查看当前数据的查询都可以添加到 WHERE 子句中:

AND rec_type = 'C'
于 2008-11-25T10:56:32.553 回答