powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / убей двойника
25 сообщений из 83, страница 2 из 4
убей двойника
    #32041104
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно проблема серьезная.
если нет идентификатора как для организаций ИНН приходится "мудрить".
написал на клиенте модуль определения "созвучности"
т.е ему пофигу пропущена ли буква или стоит другая..
преребирает названия и в случае совпадения буквосочетаний - запоминает степень "похожести" чем больше букв (от 3 до 19)- тем больше добавляемое число (число совпавших букв - определяют степень добавляемого числа)

потом сидел развлекался - брал различные слова и смотрел кто из клиентов на что смахивает )))
...
Рейтинг: 0 / 0
убей двойника
    #32041122
Denis_Ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi All!
Хочу поделиться соображениями по всем вышеозначенным способам решения данной проблемы:
1. уникальность названия (точки, запятые, пробелы, кавычки и прочие знаки препинания в названии) - такие знаки нужно искоренять нещадно, оставляем буквенно-циферную строку и назвав ее сигнатурой заносим в отдельное поле.
минус - лишняя инфа в БД
2. для поиска ошибок при вводе можно использовать ультрасуперпупермегалазеркульнейший алгоритм поиска по сигнатурам по частям с учетом индекса релевантности (круто сказал :) )
суть его в следующем: берем новое значение (его сигнатуру) и ищем его в БД (сигнатур опять же), то что нашли - во временную таблу с мах индексом,
потом режем с хвоста один символ - опять ищем - найденное - в таблу с индексом на единицу меньше и т.д. до середины выражения поиска. Затем процедуру повторяем, но режем с начала выражения. Ессно, что строки во временной таблице должны быть уникальны и упорядочены по убыванию индекса релевантности. Геморно, но зато действенно при совмещении с 1-м и 3-м способами!
минус - ежели надо срочно много инфы забить, то все положат на данный способ и потребуют его убрать
3. Назначить администратора справочника (1, мах - 2 человека), которому были бы дадены права на занесение и коррекцию инфы в нем. Остальные в него только смотрят.
минус - ежели затруднено общение администратора и пользователей справочников
4. Денежный способ по прежнему является одним из самых действенных во все времена :-)
минус - там, где зарплата нищенская могут послать и уволиться и ищите на такую зарплату еще кого-нито...
...
Рейтинг: 0 / 0
убей двойника
    #32041133
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 denis_ka
Хотелось бы взглянуть на листинг
свербыстродействующий процедуры основанной на ультрасуперпупермегалазеркульнейшем алгоритме поиска по сигнатурам по частям с учетом индекса релевантности

))
...
Рейтинг: 0 / 0
убей двойника
    #32041141
Hibernate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я решаю проблему с двойниками так:
Обчыно новые организации появляются в момент выписки счета (человек позвонил, попросил выписать счет на "РОга и копыта" ему этот счет выписали.) Я делаю просто: для того, чтобы ТОЛЬКО выписать счет _НЕОБЯЗАТЕЛЬНО_ заводить нового клиента - достаточно указать в счете название, которое может хоть 100 раз повторяться в справочнике клиентов. А ссылка на клиента проставляется только после того, как пришли деньги по этому счету, или человек пришел с доверенностью получать товар, тоесть тогда, когда появились _достоверные_ данные, по которым можно отличить одного клиента от другого. Имея исходные данные доверенности или банковского платежа, а также сведения о том, что эти движения происходят по данному конкретному счету, sp по реквизитам ищет в справочнике клиента и если его нет, то заводит нового (просит доп данные) и в счете выставляет ссылку на нужную запись.
Название - не есть понятие уникальное! - ведь есть десятки организаций с разными реквизитами, но одинаковыми именами!
...
Рейтинг: 0 / 0
убей двойника
    #32041194
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы можете быть сильно удивлены, но я сталкивался (и в свою очередь сильно удивлялся) с ситуациями, когда у двух разных организаций одинаковый ИНН (филиал и центральная контора, названия разные, находятся территориально в разных местах). Далее еще интереснее. Есть фирмы (холдинги), у которых сразу несколько ИНН в разных их подразделениях.
А по сути, IMHO, с данной проблемой программными средствами бороться соверошенно бесполезно. Для этого имеются средства организационные. Никакие программные средства не смогут выяснить, что "Александр", "Саша" и "Шура" - один и тот же человек, а Дюма и Дюма (старший и младший) - разные. И даже если вы забацаете алгоритм, который Сашу и Шуру распознает как одно название, отличить Александра от Алексана (а вот догадайтесь, опечатка это или действительно такое имя?) все равно будет невозможно без дополнительных изысканий. Слишком много разнообразных критериев. Одним словом, задача эта не систематизируется. Качество ее выполнения напрямую связано с добросовестностью конкретных работников.
IMHO, для ее решения в системе должны быть средства тотальной регистрации. Если кто-то систематически нарушает установленный регламент, и не реагирует на устные, письменные замечания и лишения премий, от него избавляются. Вот и все.
...
Рейтинг: 0 / 0
убей двойника
    #32041208
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Разруха, она в головах!" (С)
Ввод данных это одна из функций бизнес процесса и если данные можно ввести различными способами, значит либо существуют дублирующие функции, либо кто то что то не учел. В любом случае разработчик БД должен был увидеть, что не может гарантировать уникальность записей, что противоречит реляционной теории, в отношении не может быть двух одинаковых кортежей.
Сразу после того, как разработчик увидел это, и понял, что сущность он определил правильно но не хватает информации для определения РК он обязан был задать вопросы для того чтобы эту информацию получить.
Проблема, как здесь уже говорили действительно серьезная, но это проблема не в данных, а в квалификации разработчиков.
...
Рейтинг: 0 / 0
убей двойника
    #32041307
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Genady. Секундочку-секундочку. Есть справочник предприятий. Вы - пользователь, которому нужно сослаться на организацию ОАО "НПП Рога&Копыта ЦАО ЧОП". Вы не знаете, есть ли уже подобная организация в справочнике. Если ее нет, ее нужно добавить, если есть - то использовать существующую запись. Всего в справочнике 50000 организаций. В приложении имеются встроенные средства поиска. Поиск по слову "Рога" находит 300 записей. По слову "копыта" - 250. По совокупности "Рога" и "копыта" находятся 4 записи. Среди них:
ОАО "НПП Рога и Копыта ЦАО ЧОП"
ОАО "Рога&Копыта"
НПП Рога&Копыта ЦАО
ОАО "НПП Рога&КопытЫ ЦАО ЧОП"
Внимание, вопрос... На какую из них следует (и следует ли?!) ссылаться? Либо следует добавить новую запись, просто потому, что буква-в-букву с заданным наименованием ни одно не сходится?
Может быть, вы будете сильно удивлены, но правильный ответ - это все разные организации, и ссылаться на них нельзя! А сослаться нужно было на другую запись:
ОАО "НПП Р&К ЦАО ЧОП", которая ВООБЩЕ НЕ БЫЛА ОБНАРУЖЕНА ПРИ ПОИСКЕ, потому что в логотипе документа, с которым работал вчера другой юзер эта организация была указана именно в таком сокращенном виде.
А теперь объясните, какие могут быть заложены алгоритмы в программу, которые поогут решить поставленную задачу правильно?
...
Рейтинг: 0 / 0
убей двойника
    #32041311
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Garya
А вот в етой ситуации проблемма должна решаться должностными инструкциями по предприятию по теме "Ввод новых предприятий в справочники" as for me.
Я понимаю что наша общая задача сделать прилижение как можно более дуракоустичивым,но никому еще не удавалось (помоему кроме Б.Страуструпа) сделать невозможное:)) Так что логика приложения - логикой ,а описанный Вами случай нужно решать по другому.Но и Почемучка (или его предшественики ) здорово лопухнулись,жижнь есть жижнь.
А нам вот старайся во благо человеческой расхлябоности:))
ЗЫ
Да если бы было все просто нам бы всем перестали платить зарплату:)))
...
Рейтинг: 0 / 0
убей двойника
    #32041342
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вообще для выписки счета и если тагого клиента в справочнике нет - то записать в отдельную табличку...
и по приходу денег актуализировать в основной справочник...
...
Рейтинг: 0 / 0
убей двойника
    #32041437
У нас следующая организация работы со справочником клиентов:
1. Двухуровневость. Клиент может быть "головным" и "подчиненным". Головной - это физическая организация с которой ведется работа. Подчиненный - множественное обличие головнго клиента(по документам он же "Пупкин", "Хрюпкин" и пр.). Это дает меньше путаницы и незаменимо при построении отчетов.

2. Уникальность названий. Запрещено вводить в каталог клиентов несколько одинаковых наименований. С одной стороны мы прекрасно понимаем, что названия могут дублироваться, с другой, если допустить одинаковые названия, возникнет путаница: счет выпишут на одну ООО "Ромашка", отгрузят другой, платеж забьют на третью.
В общем поплакали наши менеджеры, да что-то придумали и теперь не жужжат.

3. Информирование менеджера о существовании "похожих" клиентов в базе. При вводе новой организации вызывается функция определения степени похожести клиента(алгоритм Левинштайна). Она сравнивает нового клиента со всеми в БД. При этом, перед обработкой выкидываются все лишние символы(пробелы, кавычки, тире и пр.), похожие буквы русской и английской раскладки также приводятся к одной. Если находятся близкие по похожести клиенты выдается предупреждение со списком похожих организаций.

4. "Покапывание на лысину менеджеров серной кислотой". Тоже необходимо, разумеется.

Что касается одного ответственного, то в силу специфики бизнеса назначить одного ответственного для ведения справочника организаций не представляется возможным.
...
Рейтинг: 0 / 0
убей двойника
    #32041541
Почемучка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А где бы посмотреть описание данного алгоритма Левинштайна ???
или другие алгоритмы которые могут быть полезны в этой ситуации

я пока пришел к тому, что строю некую хэш функцию (количество повторений каждого из символов в этой строке)
и значение ключа записываю в таблицу и позднее их сравниваю с тем чтобы определять степень схожести
...
Рейтинг: 0 / 0
убей двойника
    #32041546
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Garya

Что значит есть справочник предприятий?
Какой справочник? Кто его создавал? Почему там только наименования предприятий?
...
Рейтинг: 0 / 0
убей двойника
    #32041667
Кошкинсон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне тоже неизвестно про алгоритм Левинштайна. Короче, если Вы публикуете исходники SOUNDEX() по-русски, я поощрю Вас майкой. Сейчас есть совершенно чумовая майка в защиту движения open source (1 экз.) XL, белая, хлопок, 100 г/м2, рисунок: пингвин сидит на льдине и над ним изогнулась в прыжке косатка такая хищная с логотипом Microsoft (тьфу!) на бочине. Надпись по-аглицки, типа защитим идеи свободного софта, ля-ля-ля... Из-под пингвина растекается желтая лужа.
...
Рейтинг: 0 / 0
убей двойника
    #32041669
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Genady. Потому что когда просят по телефону на организацию выписать счет, то даже название организации можно расслышать не гарантированно.
Что такое справочник предприятий? Это совокупность таблиц, которая позволяет упорядочить информацию в соответствии с (ну хотя бы) 3NF. Если по меньшей мере этого не сделать, то масштабы проблем выйдут далеко за края рассматриваемой лужи и превратятся в большое море.
Конечно, там не только наименования предприятий. Но на момент, когда необходимо сослаться на запись, кроме наименования может более ничего не известно. Я о том и говорю, что когда это станет известно, то юзверь должен найти свою запись и поинтересоваться, а правильно ли ранее он ее завел. А можно и не интересоваться. А можно попытаться найти ранее введенную запись, но при этом не особенно натужно ее искать. Если с первого захода не найдется, то просто добавить еще одну.

Я вам расскажу один случай из жизни моего знакомого. Жил-был программист (он самый). Сотворил он программу отслеживания движения товара на складе. И сделал он ну все по теории. Естественно, не может быть в номенклатурном справочнике двух записей, соотносящихся с одной и той же номенклатурой. Естественно, что со склада не может уйти товар, которого там просто нет и никогда не было. Ввел он это ограничение (ну чтобы заставить кладовщиков прилагать определенные усилия для сохранения логической целостности информации). И вот приезжает однажды на склад кавалькада грузовиков на погрузку. А кладовщики еще толком не разобрались, где верх/низ у клавиатуры. Ищут они, что нужно отгрузить по наименованию "ЭЦВ 8-18-68 АБВ 220/380"... и не находят. Ну вот же он, под ногами лежит в штабелях! Нету в компьютере, черт возьми! Все глаза проглядели! Пишут они руководству служебку, что, дескать, программа плохая и приводит к задержкам в отгрузке товара. Необходимо разрешить вводить остатки товара, которые внезапно на складе обнаружены (а в программе их почему-то нет) простым внесением (операция "приход товара из подпространства"). Программист пытается сопротивляться, а ему руки заламывают, да хлопают кулаком по начальственному столу с грозным возгласом "Что! Рядиться мне с тобою!". Ну, сделал он как просили...
Навводили кладовщики остатков по товарам, которые не обнаруживали... Через месячишко глядь - на складе пусто, а в компьютере всякой всячины в остатках числится видимо-невидимо. Ту номенклатуру, которую искали, оказывается раньше завели в компьютер как "8/18/68 ЭЦВ АБВ" потому и не нашли. И много чего не нашли из того, чего раньше вводили. Короче, остатки в программе совершенно перестали стыковаться с остатками на складе. И той программкой напрочь пользоваться перестали. А программист уволился в сердцах... Такая вот история.
Это я все к тому, что порядок должен быть не только в программе, но и вокружающем ее пространстве.
...
Рейтинг: 0 / 0
убей двойника
    #32041690
Genady_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Программист пытается сопротивляться, а ему руки заламывают, да хлопают кулаком по начальственному столу с грозным возгласом "Что! Рядиться мне с тобою!".
Бывает, согласен, только я когда попадал в такие ситуации увольнялся раньше чем мне руки начинали заламывать. Коли начальству лень кладовщиков дороже нормальной работы, нефиг мне на таком предприятии делать. Хотя возможно что и в Вашем примере что то недопроектировали, если есть возможность вводить товар и так и сяк.

Это я все к тому, что порядок должен быть не только в программе, но и вокружающем ее пространстве.

Соглашусь полностью, только если в окружающем пространстве порядка нет, то и нефиг в этом пространстве сидеть, иногда мозги начальству только рынок может вправить да и то скорее всего поздно будет.
...
Рейтинг: 0 / 0
убей двойника
    #32041698
Genady_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще добавлю.
Я о том и говорю, что когда это станет известно, то юзверь должен найти свою запись и поинтересоваться, а правильно ли ранее он ее завел

Юзверь ничем интересоваться не станет, юзверя надо заставлять интересоваться, а как его заставить это уже дело технологии, можно с помощью юзверевского интерфейса, можно адмнистративно, может еще как то можно но решать это нужна на этапе проектирования и решать так, что бы была уверенность, что дублей в базе не будет.
...
Рейтинг: 0 / 0
убей двойника
    #32041714
just4fun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть вопрос по теме:
Какая собственно разница бухгалтерии Есть ли в базе "Солнечный путь" (запись один) и "Солнечный путь" (запись 2), если нет разницы Есть ли там ООО "Пупкин" и ООО "Ивкин".... т.е. если всё равно сколько организаций в базе, тогда большого значения "похожесть" названий и в целом реквизитов не имеет.
Главное на мой взгляд, если выставлен счет для "Солнечный путь" (запись один) то и отгрузку нужно производить и оформлять документы для "Солнечный путь" (запись один) ..... а обеспечить это можно очень многими путями....
1. можно находить клиента по выписанному счету
2. в книжном магазине ozone определяют клиента по сумме копеек указанной в счете... от которой нельзя отказаться при оплате...
и т.п.
...
Рейтинг: 0 / 0
убей двойника
    #32041725
just4fun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oops,.. не в ozone, а в allcd.ru ....
...
Рейтинг: 0 / 0
убей двойника
    #32041734
Sanek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полностью согласен с Genady_ .
Пока нет порядка в организации небудет порядка и в программе ! Как только пользователи поймут (заставят понять), что от их работы зависит их благополучие , то сразу станет все понятно и просто , а главное точно !
Кстати Дуракоустойчивость программы очень сильно зависит от степени заинтересованности конечного пользователя !
...
Рейтинг: 0 / 0
убей двойника
    #32041743
Hibernate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насчет дуракоустойчивости: так, просто, где-то прочитал:
"программа, которой сможет пользоваться и дурак, только дураку и нужна." :-)
...
Рейтинг: 0 / 0
убей двойника
    #32041750
Sanek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Впринципе Да , но есть некоторые программы , которые должны быть именно такими ! например текстовый редактор ну NOTEPAD например , ведь и для дурака она тоже доступна, хотя какой бы то нибул крутой программист наврядли будет использовать для создания текстового документа шеснадцатиричный редактор ...
ps.
просто к слову пришлось ... :)
...
Рейтинг: 0 / 0
убей двойника
    #32041757
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"программа, которой сможет пользоваться и дурак, только дураку и нужна."

Этот принцип придумали нерадивые разработчики.
Пользователь должен работать по своей специальности не задумываясь, что и как и куда там записывается.
...
Рейтинг: 0 / 0
убей двойника
    #32041771
Фотография XDefender
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ответ очень простой: (даже два)
1) ставишь тригер на вставку, и при вставке проверяешь на присутствие в базе данных хранимой процедурой.
Также тригер ставишь при упдэйте, если изменилось поле - запускаешь хранимую процедуру. Если такое существует - сразу откат.

Теперь о хранимой процедуре:
1) в переди убераешь пробелы, в конце тоже
2) приводишь в нормальную форму типа, если ввели
ИВанов иВАНОВИЧ - > Иванов Иванович

PS: это можно с легкостью сделать на клиенте, что немного облегчит жизнь БД.
...
Рейтинг: 0 / 0
убей двойника
    #32041775
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проблема действительно серьезная и в различных задачах может решаться по разному.

безусловно для различных аспектов учета нужна таблица с уникальными идентификаторами ,

возможно ли выписать счет клиенту если его нет в таблице - какие проблемы выписывай, укажи для таблицы ид "Неизвестный клиент" и вперед,

нужно запомнить кому выписал счет - храни это в отдельной таблице

Совершенно другой вопрос как сделать чтобы таблица была уникальна по названию клиента но в то же время поддерживала псевдонимы.

тут я вижу три решения :
1 разрешить повторы для ИД клиента и под одним идентификатором держать случайные повторы (в процессе выискивания двойников), истинное название можно пометить доп. атрибутом

2 в доп. поле двойнику указывать ИД настоящего, настоящему в этом поле null
в запросе будет его легко привязать через isnull(PSEVDO, ИД)

3. и конечно же дополнительная таблица с псевдонимами -привязанными или нет к главной


Но вопрос остается открытым :
Процедурку бы , которая на стадии ввода в уникальную таблицу (по названию) БЫСТРО находила все созвучные названия в порядке степени похожести
...
Рейтинг: 0 / 0
убей двойника
    #32041796
Почемучка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я уже 2 дня парю пользователей по результатом этого запроса (запасы серной кислоты уже кончаются :))), начал с товаров, далее клиенты
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
set nocount on
drop table #Ch
create table #Ch(C char( 1 ) primary key, K int)
insert into #Ch
select '1' C, 0  K union all
select '2', 0  union all select '3', 0  union all select '4', 0  union all select '5', 0  union all
select '6', 0  union all select '7', 0  union all select '8', 0  union all select '9', 0  union all
select '0', 0  union all
select 'q', 0  union all select 'w', 0  union all select 'e', 0  union all select 'r', 0  union all
select 't', 0  union all select 'y', 0  union all select 'u', 0  union all select 'i', 0  union all
select 'o', 0  union all select 'p', 0  union all select 'l', 0  union all select 'k', 0  union all
select 'j', 0  union all select 'h', 0  union all select 'g', 0  union all select 'f', 0  union all
select 'd', 0  union all select 's', 0  union all select 'a', 0  union all select 'z', 0  union all
select 'x', 0  union all select 'c', 0  union all select 'v', 0  union all select 'b', 0  union all
select 'n', 0  union all select 'm', 0  union all 
select 'ё', 0  union all select 'й', 0  union all select 'ц', 0  union all select 'у', 0  union all
select 'к', 0  union all select 'е', 0  union all select 'н', 0  union all select 'г', 0  union all
select 'ш', 0  union all select 'щ', 0  union all select 'з', 0  union all select 'х', 0  union all
select 'ъ', 0  union all select 'э', 0  union all select 'ж', 0  union all select 'д', 0  union all
select 'л', 0  union all select 'о', 0  union all select 'р', 0  union all select 'п', 0  union all
select 'а', 0  union all select 'в', 0  union all select 'ы', 0  union all select 'ф', 0  union all
select 'я', 0  union all select 'ч', 0  union all select 'с', 0  union all select 'м', 0  union all
select 'и', 0  union all select 'т', 0  union all select 'ь', 0  union all select 'б', 0  union all
select 'ю', 0 
 -- В данной табле гранится временные данные
 
drop table #G
select rtrim(Name) name, rtrim(Name) name2, cast('' as varchar( 100 )) Sname, idGood into #G from good

declare Cur cursor LOCAL for select name from #G
OPEN Cur
 declare @i int, @CC char( 1 ), @N varchar( 255 ),
         @C char( 1 ), @K int,
 @N2 varchar( 255 ),  -- значение функции № 1
 
 @sN varchar( 100 )   -- значение функции № 2
 
 fetch next from Cur into @N
 while @@fetch_status= 0  begin
          update #Ch set K= 0 
            select @i=len(@N), @N2=@N
            while @i<> 0  begin
             set @CC=substring(@N,@i, 1 )
             update #ch set K=K+ 1  where C=@CC
             
 --   print str(@E)+str(@R)+str(@A)+char(@G)
 
             select @i=@i- 1 
             if @cc not in ('0','1','2','3','4','5','6','7','8','9') set @N2=replace(@N2,@cc,'_')
            end
          declare Cur2 cursor LOCAL for select C,K from #Ch where K<> 0  order by  1 
          OPEN Cur2
           select @sN=''
           fetch next from Cur2 into @C, @K
           while @@fetch_status= 0  begin
            set @sN=@sN+@c+char(@K+ 65 )
            fetch next from Cur2 into @C, @K
           end 
          close Cur2
          deallocate Cur2

  UPDATE #G SET sName=@sN, name2=@N2 WHERE CURRENT OF Cur
 -- проапдатели оба ключа
 
  fetch next from Cur into @N
 end 
close Cur
deallocate Cur

 -- Временная табла для ускорения процесса
 
select g1.*
into #H
from #G g1
 where exists(select * from #G g2 where g1.sname=g2.sname and g1.idGood<>g2.idgood)

 -- Подозрительные на двойников
 
 -- 1 отлов проблем с двойными пробелами, лишние тире, скобки и т.п. (тогда просто разная длина наименования)
 
 -- 2  тире вместо пробела, или точка вместо тире и т.п. 
 

select g1.name N1,g2.name N2, g1.idgood id1, g2.idgood id2
into #H2
 from #H g1, #H g2
where (g1.sname=g2.sname and g1.idGood>g2.idgood and len(g1.name)<>len(g2.name))
   or (g1.sname=g2.sname and g1.idGood>g2.idgood and len(g1.name)=len(g2.name) and g1.name2=g2.name2)
order by  1 
drop table #H

 -- Навешивание дополнительного условия
 
 -- в случае клиента это будет INN, р/с и т.д.
 
 -- в случае товара это производитель
 
select rtrim(b1.name)+' - '+rtrim(g1.name),
       rtrim(b2.name)+' - '+rtrim(g2.name),
       h.id1, h.id2
 from #h2 H
  inner join Good G1 on g1.idgood=id1
  inner join brand B1 on b1.idBrand=g1.idBrand

  inner join Good G2 on g2.idgood=id2
  inner join brand B2 on b2.idBrand=g2.idBrand

where b1.idBrand=b2.idBrand
 --drop table #H2
 
set nocount off
go
...
Рейтинг: 0 / 0
25 сообщений из 83, страница 2 из 4
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / убей двойника
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]