2

この質問は、先日私が尋ねた質問(「重複したレコードを見つける必要があるが、取り消されたトランザクションを除外する必要がある」)のフォローアップです。

顧客の燃料取引を表示する Crystal Report があります。重複したトランザクションが誤ってインポートされる場合があります。このエラーが発見された場合、管理者はトランザクションを取り消すため、元の 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

理想的には、お客様には 1 つのトランザクション (またはまだ取り消されていない重複トランザクション) のみが表示されます。トランザクションが取り消された場合、元の一意のレコードのみを表示する必要があります。例 (上記のデータに基づく):

Date;     Qty;     Value;

1/14/08     5       20
1/20/08     8       56
1/22/08     9       62
1/22/08     9       62

先ほど説明した方法でデータを返すクエリが既にありますが、それを他のテーブルへの結合を必要とする Crystal レポートと統合する必要があります。既に持っているSQLを使用するとパフォーマンスがひどいので、他のテーブルに結合されたテーブルとしてSQLコマンドを使用する代わりに、Crystalの式内で重複(逆)トランザクションを非表示にできるかどうかを確認しようとしています.

不明な点がある場合はお知らせください。事前にあなたの知恵に感謝します!

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 に答える