无论如何,数据清理任务都是痛苦的。根据您的描述,没有足够的信息来完全自动化此任务。这对于数据清理来说是典型的。
首先,您需要与您的直属经理交谈,让他知道问题的严重性。数据都搞砸了不是你的错,在不丢失任何有效信息和不中断销售业务的情况下修复它需要时间。
关于数据清理最重要的提示是,尝试完全自动化比值得尝试的麻烦多。您的策略应该是通过处理简单的案例来减少问题,直到您可以手动完成其余的工作。总会有复杂的边缘情况,试图用聪明的 SQL 来处理它们是一种收益递减的练习。
小心低垂的果实,负“修正”有一个有效的订单号,这样你就可以与它打算取消的订单建立很强的相关性。
在剩余的负数和具有相同数量的最近的单个订单行之间创建相关性。如果可以,请使用其他列将它们关联起来,例如,如果更正是由输入原始订单的同一销售人员输入的。
下一阶段将删除订单号有效的负数,但它映射到总计为总值的多行。
然后开始将没有订单号的否定匹配到多行,这些行总和为更正中的值。这可能很难实现自动化,但此时底片的数量可能足够少,您可以通过逐一观察它们来手动完成。
另一个提示是 SQL Anywhere 似乎具有多表 DELETE 语法。我不使用 SQL Anywhere,但我在在线文档中找到了这个:
Syntax
DELETE [ row-limitation ]
[ FROM ] [ owner.]table-expression
[ FROM table-list [,...] ]
[ WHERE search-condition ]
[ ORDER BY { expression | integer } [ ASC | DESC ], ... ]
[ OPTION( query-hint, ... ) ]
看起来第一个FROM
子句列出了您要删除行的表。第二个FROM
子句允许您进行连接以限制行。由于您可能会进行自联接,请记住,您首先需要提供别名(也称为相关名称)FROM
以避免歧义。