次の一時テーブルの行と同様の行数が与えられます。
TransactionId | AccountsDocumentLineId | Amount
------------- ---------------------- ------
52345 12345 -15.79
52346 12345 15.79
52347 12345 -15.79
52348 22222 -6.34
52349 22222 6.34
52350 22222 6.34
52351 22222 -6.34
52352 22222 -8.76
52353 22222 10.49
同じ もので互いに打ち消し合う(合計がゼロになる)AccountsDocumentLineId
行を削除し、ペアにできる一致する行がなくなった行だけを残すにはどうすればよいですか?
したがって、上記の例では、TransactionId
= 52345
(または 52347
)の行が残されます(-15.79
と15.79
は互いに打ち消し合うため)。
同様に、TransactionId
=52352
との行52353
は残ります(との2つのペアが-6.34
互いに6.34
打ち消し合うため)。
したがって、次の最終結果が得られます。
TransactionId | AccountsDocumentLineId | Amount
------------- ---------------------- ------
52347 12345 -15.79
52352 22222 -8.76
52353 22222 10.49
注:目前の問題を簡単に示すために、不要な詳細(列と行を増やして)をすべて削除しました。
私が遊んだいくつかのオプションは次のとおりです。-
Amount
sのグループ内のすべてのsを合計し、AccountDocumentLineId
どの行がバランスに一致するかを確認しますが、これは最初の例(1行だけが残っている)のみを扱い、2行が残っている必要がある2番目の例は扱いません(したがって1つの値を分割して2つの行を指定するのは簡単ではありません)sのグループ内の各エントリ
AccountDocumentLineId
を調べ、一致するものが見つかった場合は、両方の対応するものを削除します。SQLでそれを行う方法がわからないが、これはうまくいくと思いますか?