假设我有一些数据存储在审计表中,其中主数据表上的触发器将所有发票记录更新写入此审计表。审计表包含以下数据:
InvoiceID CustomerID ItemSold AmountSold SalesPerson ModifyDate
1001 96 Widget 800 Robert 2001-1-1
1006 85 Thinger 350 Phil 2001-1-8
1001 96 Widget 800 Bobby 2001-1-9
1005 22 Widget 400 Robert 2001-1-10
1006 44 Thinger 500 Mike 2001-2-5
1001 96 Widget 250 Robert 2001-6-4
我想编写一个查询,每当 SalesPerson 字段发生变化时,对于任何特定的 InvoiceID(例如:每当销售员将销售更改为他的名字时)。
因此,在上面的示例中,我想确定 2001 年 1 月 9 日发生的更改,其中 InvoiceID 1001 的销售从 Robert 转移到 Bobby,以及 2001 年 6 月 4 日发生的更改从鲍比那里回到罗伯特……所以对该特定 ID 进行了两处更改。我还想确定 2001 年 2 月 5 日发生的变化,其中 InvoiceID 1006 的销售从 Phil 转至 Mike。
如何编写 SQL 查询来识别/突出显示这些更改?
该表当前不包含主键,但如果需要,我可以添加一个。
最佳答案
如果您添加主键(您应该这样做,从长远来看,这将使您在此表上需要的一些查询变得更容易) 那么你需要的是自加入。像这样的事情可能会做到这一点:
select a.invoiceId, a.SalesPerson as FirstSalesPerson,
a.Modifydate as FirstModifyDate, b.SalesPerson as SecondSalesPerson,
B.Modifydate as SecondModifyDate
from myaudittable a
join myadudittable b
on a.InvoiceID = b.InvoiceID
where a.AuditIDd <>b.AuditID and a.ModifyDate < b.ModifyDate
and a.SalesPerson<>b.SalesPerson
order by InvoiceID
关于SQL Server - 需要 SQL 查询来识别/突出显示审核表中的特定更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3096866/