0

我有一个数据库,其中包含几个月的数据,需要在报告之前对其进行清理。但是,在尝试清理它时,我了解到有些问题会使事情变得非常复杂。首先,背景。

  1. 我必须查看三个状态代码:1(已批准)、3(已撤销)和 4(已撤销)。

  2. 每个状态 4 都可以归因于状态 1 或状态 3。在理想情况下,状态 1 会在输入 4 后立即更改为状态 3,但这并不总是发生在报告的时间范围内我们得到然后将其导入数据库。

  3. 状态 4s 有一个负数,是一个反转。这个数量抵消了 1 或 3 的数量。

  4. 每条记录都有两个单独的识别号,并且 4 状态记录不会匹配 1 或 3 记录,除非它的数量为负数,并且在几乎所有情况下服务日期都会匹配。

  5. 每条记录还有一个识别客户 ID,这有助于我手动将 4s 与 1s 和 3s 匹配。

现在,问题:

如何编写基本上执行以下操作的查询:

如果两条记录之间的服务日期和客户 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 回答