SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Microsoft SQL Server » Сложный поиск соответствия.
Сложный поиск соответствия. [сообщение #2810] Sun, 23 July 2023 15:24 Переход к следующему сообщению
sergey020487 в настоящее время не в онлайне  sergey020487
Сообщений: 6
Зарегистрирован: July 2023
Junior Member
Добрый день. Помогите решить проблему. Немного предыстории. Я в SQL мягко сказать не очень, суда меня привела крайняя нужда помощи.
Раньше я подобные задачи обрабатывал на базе экселя, а точнее в Power Query. Но в силу огромной величины табличных данных PQ сдался.
Без помощи нужный скрипт на MS SQL я не напишу.
Задача такова:
Есть таблица Test. В ней много столбцов но нас интересует первый - Name.
В нем перечислены наименования товаров. Проблема в том, что некоторые названия обрезаны по количеству символов и как следствие некоторые имена не полные. Ну например:
ФОЛИЕВАЯ К-ТА 0,4МГ. №30 ТА
и
ФОЛИЕВАЯ К-ТА 0,4МГ. №30 ТАБ. /ВАЛЕНТА/
Товар указанный выше один и тот же, так как все символы до "Б. /ВАЛЕНТА/" совпадают.
Моя задача создать еще один столбец и в нем указать наименование производителя, в данном случае /ВАЛЕНТА/, даже если в названии товара в данной ячейки производитель отсутствует.
Проблема в том, что обрезаются названия как попало, это может быть и так:
ФОЛИЕВАЯ К-ТА 0,4МГ. №30 ТАБ. /ВАЛЕ
ФОЛИЕВАЯ К-ТА 0,4МГ. №30 ТАБ. /ВАЛЕНТА
Поэтому был создан реестр всех возможных названий:
/ВА, /ВАЛ, /ВАЛЕ, /ВАЛЕНТ, /ВАЛЕНТА, /ВАЛЕНТА/ (в столбик конечно же). Указанный реестр еще не интегрирован в БД. Лежит в экселе. Но предположим, что этот реестр так же интегрирован в SQL. И таблица называется manufactur
Логику решения я вижу одну:
1) Перебор. допустим мы в данный момент проверяем ячейку с наименованием "ФОЛИЕВАЯ К-ТА 0,4МГ. №30 ТА", обращаемся к реестру и узнаем, совпадает ли часть названия с какой либо позицией в реестре.
2) Если совпадений нет, то нужно пробежаться по всему списку name и найти такие же конструкции как "ФОЛИЕВАЯ К-ТА 0,4МГ. №30 ТА" и проверить есть ли в них часть текста совпадающая с реестром. Если нашлось, то указываем его в соседней ячейке у проверяемой ячейки.
3) Если в проверяемой ячейке уже есть конструкцию совподающая с реестром, то данную конструкцию из реестра тянем в соседнюю ячейку.
4) Если совпадений не, значит их нет. Идем к следующей ячейке.
Помогите решить задачу.



Re: Сложный поиск соответствия. [сообщение #2811 является ответом на сообщение #2810] Sun, 23 July 2023 19:39 Переход к предыдущему сообщениюПереход к следующему сообщению
cat2 в настоящее время не в онлайне  cat2
Сообщений: 10
Зарегистрирован: July 2023
Junior Member
Это у Вас справочник наименований ?
Re: Сложный поиск соответствия. [сообщение #2812 является ответом на сообщение #2811] Sun, 23 July 2023 21:44 Переход к предыдущему сообщениюПереход к следующему сообщению
sergey020487 в настоящее время не в онлайне  sergey020487
Сообщений: 6
Зарегистрирован: July 2023
Junior Member
cat2 писал(а) Sun, 23 July 2023 19:39
Это у Вас справочник наименований ?
Да
Re: Сложный поиск соответствия. [сообщение #2813 является ответом на сообщение #2812] Mon, 24 July 2023 10:49 Переход к предыдущему сообщениюПереход к следующему сообщению
BlackEric в настоящее время не в онлайне  BlackEric
Сообщений: 360
Зарегистрирован: June 2022
Senior Member
Ну тут только по длине работать.
1. Выбираете товары. Хз как группировать. По совпадению скольки-то первых символов. Самое сложное вот это подобрать что бы и лишнего не нахватать и ничего не пропустить.
2. Потом для этих товаров находите производителя. Выбираете в группе самую длинную сроку производителя.
3. И у каждой группы заполняете производителя.
Ну и переносите из временных таблиц все в итоговые справочники.
Re: Сложный поиск соответствия. [сообщение #2814 является ответом на сообщение #2813] Mon, 24 July 2023 14:02 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время в онлайне  SD
Сообщений: 411
Зарегистрирован: August 2022
Senior Member
Лично я эту задачу решал ручным способом. Табличка соответствия "грязное название - чистое название" и если входное название ещё не в этой табличке, то софтина просит оператора указать соответствие ручками. Со временем этот "справочник синонимов" накапливается и вмешательство человека становится менее нужным.
Re: Сложный поиск соответствия. [сообщение #2815 является ответом на сообщение #2813] Mon, 24 July 2023 14:36 Переход к предыдущему сообщениюПереход к следующему сообщению
sergey020487 в настоящее время не в онлайне  sergey020487
Сообщений: 6
Зарегистрирован: July 2023
Junior Member
как это реализовать запросом, можете пару тезисов (имею в виду код) накидать?
Re: Сложный поиск соответствия. [сообщение #2816 является ответом на сообщение #2814] Mon, 24 July 2023 14:51 Переход к предыдущему сообщениюПереход к следующему сообщению
sergey020487 в настоящее время не в онлайне  sergey020487
Сообщений: 6
Зарегистрирован: July 2023
Junior Member
объем очень большой. этот вариант не подходит. проще тогда кусками обрабатывать на каком нибудь экселе.
Re: Сложный поиск соответствия. [сообщение #2817 является ответом на сообщение #2816] Mon, 24 July 2023 15:39 Переход к предыдущему сообщениюПереход к следующему сообщению
shigor в настоящее время не в онлайне  shigor
Сообщений: 26
Зарегистрирован: March 2023
Географическое положение: НиНо
Junior Member
логика дырявая..
пример: предположим в реестре одна полная строка "ФОЛИЕВАЯ К-ТА 0,4МГ. №30 ТАБ. /ВАЛЕНТА/"
и встречается "ФОЛИЕВАЯ К-ТА 0,4МГ. №30 ТАБ /ВАЛЕНТА/"
все поломалась логика! добавлять в реестр?
тогда для "ФОЛИЕВАЯ К-ТА 0,4МГ. №30 ТА" подойдут оба варианта..

ИИ вам в помощь.
Re: Сложный поиск соответствия. [сообщение #2818 является ответом на сообщение #2817] Mon, 24 July 2023 15:55 Переход к предыдущему сообщениюПереход к следующему сообщению
sergey020487 в настоящее время не в онлайне  sergey020487
Сообщений: 6
Зарегистрирован: July 2023
Junior Member
В реестре не вся строка, в реестре только наименования производителей в разной форме:
/Валента/
/Валента
/Вален и так далее

[Обновления: Mon, 24 July 2023 15:55]

Известить модератора

Re: Сложный поиск соответствия. [сообщение #2831 является ответом на сообщение #2818] Tue, 25 July 2023 14:02 Переход к предыдущему сообщениюПереход к следующему сообщению
shigor в настоящее время не в онлайне  shigor
Сообщений: 26
Зарегистрирован: March 2023
Географическое положение: НиНо
Junior Member
все-равно невозможно однозначно сказать, что "ФОЛИЕВАЯ К-ТА 0,4МГ. №30 ТА" это "/Валента/"
Re: Сложный поиск соответствия. [сообщение #2832 является ответом на сообщение #2831] Tue, 25 July 2023 17:08 Переход к предыдущему сообщению
sergey020487 в настоящее время не в онлайне  sergey020487
Сообщений: 6
Зарегистрирован: July 2023
Junior Member
Решено. Всем спасибо.
Предыдущая тема: Скрипт sql в xml
Следующая тема: Запрос + представление или функция, как лучше сделать?* (Задача со звездочкой)
Переход к форуму:
  


Текущее время: Thu Nov 21 15:37:46 GMT+3 2024

Общее время, затраченное на создание страницы: 0.00769 секунд