Задачи очистки данных являются болезненными, несмотря ни на что. Из того, что вы описали, недостаточно информации для полной автоматизации этой задачи. Это типично для очистки данных.
Сначала вам нужно поговорить с вашим непосредственным руководителем и сообщить ему масштаб проблемы. Вы не виноваты, что все данные испорчены, и потребуется время, чтобы исправить их, не теряя никакой достоверной информации и не прерывая операции продаж.
Самый важный совет по очистке данных состоит в том, что больше проблем, чем стоит пытаться полностью автоматизировать . Ваша стратегия должна состоять в том, чтобы уменьшить проблему, заботясь о простых случаях, пока вы не можете сделать остальное вручную. Всегда будут сложные крайние случаи, и попытка обработать их все с помощью умного SQL - упражнение для уменьшения отдачи.
Позаботьтесь о низко висящих фруктах, где отрицательная «коррекция» имеет действительный номер заказа, чтобы вы могли сделать сильную корреляцию с заказом, который он намерен отменить.
Создание корреляции между оставшимися отрицательными значениями и самыми последними строками одного заказа с одинаковым количеством. Если возможно, используйте другие столбцы, чтобы сопоставить их, например, если исправление введено тем же продавцом, который ввел исходный заказ.
Следующим этапом будет удаление негативов, если номер заказа действителен, но он сопоставляется с несколькими строками, которые суммируют до общего значения.
Затем начните сопоставлять негативы без порядковых номеров с несколькими строками, которые суммируют до значения в коррекции. Это может быть сложно автоматизировать, но к этому времени число негативов может быть достаточно мало, чтобы вы могли сделать это вручную, посмотрев на них один за другим.
Другой совет заключается в том, что SQL Anywhere имеет синтаксис DELETE для нескольких таблиц. Я нигде не использую SQL, но я нашел это в онлайн-документах:
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
, чтобы избежать двусмысленности.