根据特定字段中的新条目和已删除条目组织报告

时间:2017-01-17 14:00:10

标签: sql ms-access

我有一个简单的报告,它根据给定的标准提取记录。它只会拉:

ID | Name | PI | Address | Phone

我需要将其分为四个单独的报告;记录添加,删除记录,其他更改,没有更改。

如果添加了记录,则表示PI字段在上次运行报表时不准确。如果它被删除,我知道这意味着它在上一次报告中,但不是这个。其他更改将任何编辑分类为姓名,地址或电话。

因此,如果我有两个这样的报告,原始报告和新报告,那么哪些查询可以完成此任务?两份报告都有相同的字段。

我尝试使用WHERE NOT EXISTS子句来运行联合,但我无法正确使用语法。

1 个答案:

答案 0 :(得分:0)

您可以使用哪些唯一标识符来比较原始报告和新报告?我通常会猜到ID,但是你说:

  

如果添加了记录,则表示PI字段不准确   在报告的最后一轮。

(应该"确切"已经"存在"?)。无论如何,我们假设它是ID字段 - 如果它实际上是PI字段,那么只需将ID更改为PI即可下面的JOIN条款。

新增记录:

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