2017-01-17 9 views
0

私は、指定された条件でレコードを取得する簡単なレポートを持っています。特定のフィールドの新しいエントリと削除されたエントリに基づいてレポートを整理する

ID | Name | PI | Address | Phone 

これを4つの別々のレポートに分ける必要があります。追加されたレコード、削除されたレコード、その他の変更および変更はありません。

レコードが追加されている場合は、フィールドPIがレポートの最終実行時に正確ではなかったことを意味します。それが削除された場合、それは最後のレポートにあったが、このレポートではなかったことを意味します。その他の変更は、名前、住所または電話番号の編集を分類します。

これらのレポートのうち2つがオリジナルと新規の場合、どのようなクエリでこれを達成できますか?どちらのレポートも上記と同じフィールドです。

WHERE NOT EXISTS句を使用してユニオンを実行しようとしましたが、構文を正しく取得できません。

答えて

0

元のレポートと新しいレポートを比較するために使用できる各レコードの一意のIDは何ですか?レコードは、フィールドPIは、レポートの最後に実行に を強要しなかったことを意味し、追加されている場合は

:私は普通IDを推測しているだろうが、その後は状態。

(「正確に」存在している必要がありますか?)とにかく、それがIDフィールドだとしましょう。実際にはPIフィールドの場合、下のすべてのJOIN節でIDからPIに変更してください。

新しいレコードが追加さ:

SELECT n.* FROM [NEW] n LEFT JOIN [ORIGINAL] o ON n.ID = o.ID WHERE o.ID IS NULL 

レコードが削除:

SELECT o.* FROM [ORIGINAL] o LEFT JOIN [NEW] n ON n.ID = o.ID WHERE n.ID IS NULL 

レコードを変更:

SELECT o.ID, o.PI, o.Name Orig_Name, n.Name New_Name, 
    o.Address Orig_Address, n.Address New_Address, 
    o.Phone Orig_Phone, n.Phone New_Phone 
FROM [ORIGINAL] o INNER JOIN [NEW] n ON o.ID = n.ID 
WHERE o.Name <> n.Name OR o.Address <> n.Address OR o.Phone <> n.Phone 

レコードが変更されていない:

SELECT o.ID, o.PI, o.Name, o.Address, o.Phone 
FROM [ORIGINAL] o INNER JOIN [NEW] n ON o.ID = n.ID 
WHERE o.Name = n.Name AND o.Address = n.Address AND o.Phone = n.Phone 
関連する問題