我有一个数据库,其中包含几个月的数据需要在报告之前进行清理。然而,在试图清理它时,我已经了解到存在一些使问题复杂化的问题。首先,背景。
我需要查看三个状态代码:1(已批准),3(已撤消)和4(撤消)。
每个状态4都可归因于状态1或状态3.在完美世界中,只要输入4,状态1就会更改为状态3,但这并不总是发生在我们获得的报告的时间范围内,然后将其导入数据库。
状态4具有负数量,是逆转。此数量取消1或3的数量。
每条记录都有两个单独的识别号码,4号状态记录与1号或3号记录不匹配,除非其数量为负,几乎在所有情况下服务日期都匹配。
每条记录还有一个识别客户ID,这有助于我手动将4s与1s和3s匹配。
现在,问题是:
如何编写基本上执行以下操作的查询:
如果两条记录之间的服务日期和客户ID匹配, AND记录1的数量取消记录2的数量(qtyR1 + qtyR2 = 0)然后删除记录的两个。或者至少删除状态1或状态3记录,因为这样我就可以轻松地为状态4记录写一个删除查询。
我很乐意回答任何问题,因为我不确定我是否完全清楚背景。
答案 0 :(得分: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
)