powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Приведение таблицы строк к единому виду, помогите плиз
25 сообщений из 53, страница 1 из 3
Приведение таблицы строк к единому виду, помогите плиз
    #32635221
Grigoriy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hell'0 W0RLD! :)
Есть таблица с кучей строк - наименования препаратов от разных поставщиков , Сводный прайс поставщиков(СПП). 35000 строк
И есть таблицы - номенклатурный справочник предприятия(НСП). 5 000 строк
Необходимо для каждой позиции из НСП найти все аналоги из СПП, если они есть.
Проблема заключается в том, что каждый поставщик использует свой стиль написания наименований.
Вот пример из СПП, где один препара имеет несколько написаний:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
5-НОК 0,05 N50 ДРАЖЕ
5-НОК 50МГ N50 ТАБЛ П/ОБ
5-НОК 50МГ ТАБ. Х50
5-НОК №50,ТАБ
5-Нок др. 50мг N50
5-НОК ТАБ. П/О 50МГ №50
5-НОК ТАБ. П/О 50МГ №50
5-НОК ТАБ.П/О 0.05Г N50
5-НОК ТАБЛ. П/О 50МГ N50  РОССИЯ-СЛОВЕНИЯ
5-НОК ТАБЛ. П/О 50МГ N50 СЛОВЕНИЯ
Попытка вытянуть все явные одинаковости неудачна - из 35 000 СПП лишь 300 четко соответсвуют наименованиям из НСП.
Т.о. приходится решать задачу унификации написания наименований.
Если сокращения я еще могу исправить - напишу запрос для каждого поставщика, где буду исправлять "таб", "табл", "тб." на "таблетка"(или ампула, флакон, крем, гель и т.п.), то с цифрами ГОРАЗДО сложнее - как видно из примера, даже Номер все пишут по-разному (Х50, N50, №50), не говоря уже о разделителе дробной части (, или . ) и дозировке ( 50 МГ, 0,05 Г)
И еще есть проблема порядкового следования - у одного идет 0,05 и потом ТАБ, а у другого наоборот.
---
Сначала мне казалось, что replace, patindex, charindex меня спасут...
Но когда я накорябал 200 строк одних реплейсов и кол-во уникальных записей упало с 35 до 32 тыс, я понял - неправильным путем иду.
Может кто-то решал подобную задачу, мож у кого есть свежие идеи или ссылки на свежие идеи...
Хелп...
...
Рейтинг: 0 / 0
Приведение таблицы строк к единому виду, помогите плиз
    #32635321
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только вручную.
Или потребуйте от поставщиков критерий - пусть шлют артикул какой-нибуть.
...
Рейтинг: 0 / 0
Приведение таблицы строк к единому виду, помогите плиз
    #32635403
Grigoriy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
первое уточнение - поставщики плевать хотели на мои требования - "мы не станем менять справочники из-за такой мелочи".
второе уточнение- сейчас я решаю задачу именно ручным методом. Но если мне удасться автоматически уменьшить кол-во неидентичных записей до меньшего, чем в НСП, то это уже успех, т.к. можно уже выставлять соответсвия в обратную сторону, а это много быстрее...
...
Рейтинг: 0 / 0
Приведение таблицы строк к единому виду, помогите плиз
    #32635422
Chuveljov Andrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У каждого поставщика свой справочник?
Так составьте таблицу соответствия.

А вообще на лекарства (я правильно понял, это лекартсва) существует вполне едиообраный способ написания - так как они внесены в реестр Минздрава. Всё остальное - от лукавого.

___________________
Всё вышеизложенное есть моё частное мнение и не претендует на полноту изложения.
...
Рейтинг: 0 / 0
Приведение таблицы строк к единому виду, помогите плиз
    #32635466
r2d2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно попробовать функцию нечеткого сравнения, в инете где-то болтается.
на входе две строки на выходе степень схождения
если ну очень надо, а искать лень - могу скинуть
...
Рейтинг: 0 / 0
Приведение таблицы строк к единому виду, помогите плиз
    #32635467
Николай МВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваша проблема очень хорошо рассмотрена в топике "Убей двойника". Там речь немного о другом, но смысл тот же.
Если вкратце -- человеческие ошибки придется исправлять человекам, вы можете лишь ускорить этот процесс с помощью крутых алгоритмов подбора вероятных двойников.
...
Рейтинг: 0 / 0
Приведение таблицы строк к единому виду, помогите плиз
    #32635497
Николай МВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще можете попробовать функцию DIFFERENCE, она только для латинских букв, но не в этом проблема. Она очень грубая, толку никакого...
Если решитесь попробовать, могу Вам кинуть свою функцию замены русских букв на латинские.
...
Рейтинг: 0 / 0
Приведение таблицы строк к единому виду, помогите плиз
    #32635574
Grigoriy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отвечу всем по порядку.
1. Chuveljov AndrewУ каждого поставщика свой справочник?
Так составьте таблицу соответствия.

А вообще на лекарства (я правильно понял, это лекартсва) существует вполне едиообраный способ написания - так как они внесены в реестр Минздрава. Всё остальное - от лукавого.
Представляете себе 35 000 раз выставлять соответсвия? Я почти так и делаю, но это же гемор невообразимый!
А насчет реестра Минздрава - да, я тоже эту мантру знаю и повторяю ее. Но реальность такова, какой ее чувствует орган, а не какой изображает фотография :))
2. r2d2Можно попробовать функцию нечеткого сравнения, в инете где-то болтается.
на входе две строки на выходе степень схождения
если ну очень надо, а искать лень - могу скинуть
Это дело я долго изучал - не годится. Дело в том, что для этой функции разница в номере (№10, №20) равнозначна разнице в написании номера (№10, Х10) Что не есть гут.
Николай МВВаша проблема очень хорошо рассмотрена в топике "Убей двойника". Там речь немного о другом, но смысл тот же.
...
Еще можете попробовать функцию DIFFERENCE, она только для латинских букв, но не в этом проблема. Она очень грубая, толку никакого...

Надо посмотреть. Только это не ошибки.
А Difference здесь никак.
---
Мне ведь что надо? Разобрать строку, выделить из нее лексемы и занести их в другие поля. А потом собрать строку из этих полей.
В итоге я просто Напишу
Select Имя+ФормаВыпуска+Дозировка+Номер+Остальное From MySuperTable
Вот дожить бы до "В итоге"...
...
Рейтинг: 0 / 0
Приведение таблицы строк к единому виду, помогите плиз
    #32635597
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Grigoriyпервое уточнение - поставщики плевать хотели на мои требования - "мы не станем менять справочники из-за такой мелочи".
Им не нужно менять справочники, у них уже есть свои идентификаторы товаров, и нужно всего-лишь попросить их прислать. Обычно это так. Разве-что поставщики ваши - челноки, везущие аспирин по таблетке. :-)
...
Рейтинг: 0 / 0
Приведение таблицы строк к единому виду, помогите плиз
    #32635602
Grigoriy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ай мин, что ДАЖЕ если они будут присылать свой артикульный номер - какая мне разница?
Ну придется сопоставлять артикульные номера, которые у каждого свои. Жэто еще хуже. ЕДИНЫЙ НОМЕР не используется. Такова правда жизни. Таковы программы отсылки прайсов на той стороне.
wBr Grigoriy Gruben
...
Рейтинг: 0 / 0
Приведение таблицы строк к единому виду, помогите плиз
    #32635687
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrigoriyАй мин, что ДАЖЕ если они будут присылать свой артикульный номер - какая мне разница?
Ну придется сопоставлять артикульные номера, которые у каждого свои. Жэто еще хуже. ЕДИНЫЙ НОМЕР не используется. Такова правда жизни. Таковы программы отсылки прайсов на той стороне.
wBr Grigoriy Gruben
Разумеется, ЕДИНЫЙ НОМЕР не используется.
Нужно сделать таблицу соответствий НСП артикульным номерам по поставщикам. Для каждого товара - список записей артикул+код_поставщика. Далее при импорте (обновлении прайсов) они будут обновляться по этим номерам. Новые товары, для которых сопоставления нет, будете заносить вручную. Первичная привязка - тоже вручную. Других вариантов всё-равно нет.
...
Рейтинг: 0 / 0
Приведение таблицы строк к единому виду, помогите плиз
    #32636181
Grigoriy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Первичная привязка - вручную."
В этом то и проблема...
Т.е. механизмов, позволяющих? к примеру, вырезать из строки цифры между % и стоящей ранее ^ нет?
Только средствами дельфей смогу?
...
Рейтинг: 0 / 0
Приведение таблицы строк к единому виду, помогите плиз
    #32636251
sti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот уже обсуждали подобное:

http://www.sql.ru/forum/actualthread.aspx?tid=89526&hl=%e0%f1%ef%e8%f0%e8%ed
...
Рейтинг: 0 / 0
Приведение таблицы строк к единому виду, помогите плиз
    #32636432
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Grigoriy"Первичная привязка - вручную."
В этом то и проблема...
Т.е. механизмов, позволяющих? к примеру, вырезать из строки цифры между % и стоящей ранее ^ нет?
Только средствами дельфей смогу?
Почему, кое-какие есть, хотя на дельфях проще. А ещё проще с регулярными выражениями, если вы с ними работали.
Можно сделать предварительную обработку, 80-90 % обработается правильно. Но всё-равно нужно будет вручную всё проверить.
В MSSQL для работы со строками см. PATINDEX и SUBSTRING.

Кстати, для этой обработки можно создать правила лдя каждого поставщика отдельно, если их немного и если каждый поставщик использует строго определённое написание, скажем, если у одного всегда 50МГ, а у другого всегда 0.05Г.
...
Рейтинг: 0 / 0
Приведение таблицы строк к единому виду, помогите плиз
    #32636585
Grigoriy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насчет patindex и т.д. - см первый постинг темы :)
Насчет раздельного форматирования- именно так я и поступлю
10 постащиков - не проблема
...
Рейтинг: 0 / 0
Приведение таблицы строк к единому виду, помогите плиз
    #32636804
Grigoriy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по поводу регулярных выражений...
есть в серваке механизмы, позволяющие мне
вместо
реплейса
Х1
Х2
Х3
использовать более короткую форму типа replace(ИМЯ, 'Х[0-9]','№[0-9]')
?
...
Рейтинг: 0 / 0
Приведение таблицы строк к единому виду, помогите плиз
    #32636878
Алексей2003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create function dbo.substr(@s varchar( 100 ), @p1 int, @p2 int)
returns varchar( 100 )
as begin
 return substring(@s, @p1, @p2-@p1)
end
go
declare @s varchar ( 100 )
set @s = 'fdsag X3 fdrewq'
select dbo.substr(@s, patindex('%X[0-9]%', @s), charindex(' ', @s, patindex('%X[0-9]%', @s)))
go
drop function dbo.substr
примерно так

для спящего время бодрствования равносильно сну
...
Рейтинг: 0 / 0
Приведение таблицы строк к единому виду, помогите плиз
    #32637119
Grigoriy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patindex не работает в этой функции
...
Рейтинг: 0 / 0
Приведение таблицы строк к единому виду, помогите плиз
    #32637133
Алексей2003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня "Х" англицкая


для спящего время бодрствования равносильно сну
...
Рейтинг: 0 / 0
Приведение таблицы строк к единому виду, помогите плиз
    #32637136
Grigoriy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...Что неудивительно при Ха напечатанном буквой Икс :)
wBr Grigoriy Gruben
...
Рейтинг: 0 / 0
Приведение таблицы строк к единому виду, помогите плиз
    #32637227
Grigoriy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
create function dbo.findNum(@s varchar( 255 ))
returns varchar( 100 )
as begin
declare @p1 int
declare @p2 int
declare @retu varchar( 255 )
 set @s=@s+' '
 set @p1=patindex('% Х[0-9]%',@s)
 if @p1> 0  
  begin
    set @p2=charindex(' ', @s, @p1+ 2 )
    set @retu= substring(@s, @p1+ 2 , @p2-@p1- 2 ) --+'|'+Str(@p1)+'|'+Str(@p2)+'|'+@s 
  end else 
  begin
    set @retu='NULL'
  end
  if ISNUMERIC(@retu)= 1   set @retu=@retu else  set @retu='NULL'
  return @retu
end
go
declare @s varchar ( 255 )
select dbo.FindNum(NAimEN) From  NewPrice 
Where dbo.FindNum(NAimEN)<>'NULL'
drop function dbo.FindNum

Вот что я сделал из вашей функции - с учетом номера в конце строки и другими неожиданностями :)
Нормально?
Неудобно то, что в Where я тоже юзаю эту функцию - это неверно наверное?
...
Рейтинг: 0 / 0
Приведение таблицы строк к единому виду, помогите плиз
    #32637261
Grigoriy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще вопрос
можно ли переделать функцию так, чтобы вторым парметром шел не просто символ (Х или N), а набор символов, который может означать номер?
Например, [Х, N, №]

wBr Grigoriy Gruben
...
Рейтинг: 0 / 0
Приведение таблицы строк к единому виду, помогите плиз
    #32637273
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
patindex не работает в этой функции
Не все что угодно можно использовать в качестве параметров для функций и процедур

Например, [Х, N, №]
Собственно и [ХN№]
...
Рейтинг: 0 / 0
Приведение таблицы строк к единому виду, помогите плиз
    #32637310
Grigoriy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с Patindex разобрались, всё ОК
А вот с [NХ№] не совсем...
set @Symb='[NХ№]'
set @p1=patindex('% '+@Symb+'[0-9]%',@s)
дает 0 всегда.
т.е.
[NХ№][0-9]
недопустимая конструкция?
wBr Grigoriy Gruben
...
Рейтинг: 0 / 0
Приведение таблицы строк к единому виду, помогите плиз
    #32637319
Grigoriy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри за режим чата, но правильно всё же
[N,Х,№]
wBr Grigoriy Gruben
...
Рейтинг: 0 / 0
25 сообщений из 53, страница 1 из 3
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Приведение таблицы строк к единому виду, помогите плиз
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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