Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Чистка справочников. Как лучше?  [new]
sky
Member

Откуда:
Сообщений: 281
Всем привет!
Возник вопрос: есть система учета материалов, проще говоря складская база. С самого начала заполнение справочников контрагентов и артикулов было возложено кладовщиков, то есть при появлении новых наименований или фирм-поставщиков они сами забивали названия. Соответственно в итоге получилось куча дублирующих записей, например, Рога и копыта, "Рога и Копыта", ЗАО "Рога и копыта"; рукавицы брезентовые, брезентовые рукавицы, рукавицы брез. и т.п.. Но это еще не самое страшное, самое страшное когда начинаешь сверять остатки, вот тут самый гиммор. Так вот собственно вопрос как бы от этих дублирующих записей избавиться с наименьшими затратами сил и нервов.
Просто даже идей маловато гнать курсор по таблице и лайком потом искать? Не самое изящное решение на мой взгляд, может кто сталкивался?
2 окт 03, 09:50    [360344]     Ответить | Цитировать Сообщить модератору
 Re: Чистка справочников. Как лучше?  [new]
zDIV
Member

Откуда: Оренбург
Сообщений: 390
По-моему, переделать справочник вручную... (А как еще справишься с сокращениями и перестановками слов, можно в автомате запросто нарваться, а передалать придется, иначе это реляционный мусор получается а не база)
1) Сделать ХП OldID, NewID, которая бы претаскивала все ссылки с других табл с OldID-записи (непригодной OldCaption) на NewID-запись (новую или одну самую подходящую NewCaption) справочника, а после грохала бы эту олд-запись (с этим можно повременить, но не очень (до эксплуатации)).
2) Простейшая прога из двух одинаковых табл-гридов (две копии таблы справочника), левая для OldID, правая для NewID и одна кнопка для вызова ХП
0) Определить права (роль) для ответсвенного чела за справочник.
-1) Не забыть держать неправленную копию базы некоторое (лучше неограниченое :)) время.
2 окт 03, 10:14    [360380]     Ответить | Цитировать Сообщить модератору
 Re: Чистка справочников. Как лучше?  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
не что иное как сведение артикулов...

Сделать таблицу, где хранить ссылки правильный товар - неправильный товар
Заполнить ее (вручную конечно !)а потом запросами перенести ссылки
с кривых карточек на правильные. Потом кривые можно замочить.... :)
Это всё ужасный гемор....Особенно с ценами...
То же проделать с остальными дубляжами.
Это самое лучшее решение. Его можно делать частями в течение длит.
времени.
Качественная проверка на дубляж - признак профессионального решения !
2 окт 03, 10:26    [360403]     Ответить | Цитировать Сообщить модератору
 Re: Чистка справочников. Как лучше?  [new]
Некто
Member

Откуда: Киев
Сообщений: 312
2 LSV
>Качественная проверка на дубляж - признак профессионального решения !

IMHO, качественная проверка на дубляж при вставке новых записей.
Нет ли у Вас часом ТЗ на такую проверку?!
2 окт 03, 18:19    [361739]     Ответить | Цитировать Сообщить модератору
 Re: Чистка справочников. Как лучше?  [new]
ss
Guest
--Идея: сжать строку до строки сравнения (выбросить лишние символы), а
--потом дать эту инфу пользователю для анализа

Alter Procedure mat_p_ПроверкаИмениМЦ

(
@КодСтроки int = null,
@Имя nvarchar(100),
@КодЕдИзм int =null
)

As
set nocount on


if @КодЕдИзм is null

SELECT [00СпрИменМЦ].IDКодМЦ, [00СпрИменМЦ].NAIM,
[87 Единицы измерения].ЕдИзм
FROM [00СпрИменМЦ] INNER JOIN
[87 Единицы измерения] ON
[00СпрИменМЦ].КодЕдИзм = [87 Единицы измерения].КодЕдИзм
WHERE IDКодМЦ<>isnull(@КодСтроки,0) and
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
NAIM,'"', ''), ' ', ''), '-', ''), '*', ''), '/', ''), '\', ''), '.', ''), ',', ''), '`', ''), '%', ''),'N','') =REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
@Имя,'"', ''), ' ', ''), '-', ''), '*', ''), '/', ''), '\', ''), '.', ''), ',', ''), '`', ''), '%', ''),'N','')

else

SELECT [00СпрИменМЦ].IDКодМЦ, [00СпрИменМЦ].NAIM,
[87 Единицы измерения].ЕдИзм
FROM [00СпрИменМЦ] INNER JOIN
[87 Единицы измерения] ON
[00СпрИменМЦ].КодЕдИзм = [87 Единицы измерения].КодЕдИзм
WHERE IDКодМЦ<>isnull(@КодСтроки,0) and [00СпрИменМЦ].КодЕдИзм=@КодЕдИзм and
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
NAIM,'"', ''), ' ', ''), '-', ''), '*', ''), '/', ''), '\', ''), '.', ''), ',', ''), '`', ''), '%', ''),'N','') =REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
@Имя,'"', ''), ' ', ''), '-', ''), '*', ''), '/', ''), '\', ''), '.', ''), ',', ''), '`', ''), '%', ''),'N','')


return
2 окт 03, 18:41    [361795]     Ответить | Цитировать Сообщить модератору
 Re: Чистка справочников. Как лучше?  [new]
Сергей 2
Member

Откуда:
Сообщений: 161
--Идея: замена лишних символов (их удаление при сравнении)
--а потом пользователь сам пусть выбирает
Alter Procedure mat_p_ПроверкаИмениМЦ

(
@КодСтроки int = null,
@Имя nvarchar(100),
@КодЕдИзм int =null
)

As
set nocount on

if @КодЕдИзм is null

SELECT [00СпрИменМЦ].IDКодМЦ, [00СпрИменМЦ].NAIM,
[87 Единицы измерения].ЕдИзм
FROM [00СпрИменМЦ] INNER JOIN
[87 Единицы измерения] ON
[00СпрИменМЦ].КодЕдИзм = [87 Единицы измерения].КодЕдИзм
WHERE IDКодМЦ<>isnull(@КодСтроки,0) and
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
NAIM,'"', ''), ' ', ''), '-', ''), '*', ''), '/', ''), '\', ''), '.', ''), ',', ''), '`', ''), '%', ''),'N','') =REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
@Имя,'"', ''), ' ', ''), '-', ''), '*', ''), '/', ''), '\', ''), '.', ''), ',', ''), '`', ''), '%', ''),'N','')

else

SELECT [00СпрИменМЦ].IDКодМЦ, [00СпрИменМЦ].NAIM,
[87 Единицы измерения].ЕдИзм
FROM [00СпрИменМЦ] INNER JOIN
[87 Единицы измерения] ON
[00СпрИменМЦ].КодЕдИзм = [87 Единицы измерения].КодЕдИзм
WHERE IDКодМЦ<>isnull(@КодСтроки,0) and [00СпрИменМЦ].КодЕдИзм=@КодЕдИзм and
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
NAIM,'"', ''), ' ', ''), '-', ''), '*', ''), '/', ''), '\', ''), '.', ''), ',', ''), '`', ''), '%', ''),'N','') =REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
@Имя,'"', ''), ' ', ''), '-', ''), '*', ''), '/', ''), '\', ''), '.', ''), ',', ''), '`', ''), '%', ''),'N','')


return
2 окт 03, 18:47    [361806]     Ответить | Цитировать Сообщить модератору
 Re: Чистка справочников. Как лучше?  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
2Некто

Почему-то такую простую вещь мало кто делает !
Хотя за допущение этого наказывать надо...... :)

Вводом данных в ответственные таблицы должны заниматься
как можно меньше людей. И покомпетентнее !!! :)
У нас свели наверно 500000 ! карточек ! (сеть супермаркетов)

А ща этим ведает только 2 лучших :) человека. И нет проблем !!!!!
Всё суперуникально и правильно ! :) Распространяется автоматом.
2 окт 03, 18:50    [361811]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить