0

報告する前にクリーンアップする必要がある数か月分のデータを含むデータベースがあります。しかし、それを片付けようとして、物事を非常に複雑にするいくつかの問題があることを知りました。まず、背景。

  1. 調べる必要があるステータス コードは 3 つあります。1 (承認済み)、3 (取り消された)、4 (取り消された) です。

  2. すべてのステータス 4 は、ステータス 1 またはステータス 3 のいずれかに起因する可能性があります。完全な世界では、4 が入力されるとすぐにステータス 1 がステータス 3 に変更されますが、レポートの時間枠で常に発生するとは限りません。それがデータベースにインポートされます。

  3. ステータス 4 の数量はマイナスで、反転しています。この数量は、1 または 3 の数量を相殺します。

  4. 各レコードには 2 つの個別の識別番号があり、4 ステータス レコードは 1 または 3 レコードとは一致しませんが、その数量がマイナスであり、ほとんどの場合、サービスの日付が一致します。

  5. 各レコードには識別用の顧客 ID も含まれているため、手動で 4 を 1 および 3 に一致させることができます。

さて、質問:

基本的に次のことを行うクエリを作成するにはどうすればよいですか。

2 つのレコード間でサービスの日付と顧客 ID が一致し、かつレコード 1 の数量がレコード 2 の数量を相殺する (qtyR1+qtyR2=0) 場合、両方のレコードを削除します。または、少なくともステータス 1 またはステータス 3 のレコードを削除します。ステータス 4 のレコードの削除クエリを簡単に作成できるからです。

背景について完全に理解できていないので、質問があれば喜んでお答えします。

4

1 に答える 1

0

これにより、最初にqtyR1 + qtyR2=0レコードが削除されます。

DELETE *
FROM myTable A
WHERE
    EXISTS (
        SELECT * FROM myTable B
        WHERE
            B.CustID = A.CustID AND
            B.Date = A.Date AND
            ((A.Status = 1 AND B.Status = 2) OR (A.Status = 2 AND B.Status = 1)) AND
            A.Quantity + B.Quantity = 0
    )
于 2013-01-03T18:14:10.100 に答える