| Начало » Использование СУБД » Microsoft SQL Server » Сложный поиск соответствия. Переход к форуму:
	| 
		
			| Сложный поиск соответствия. [сообщение #2810] | Sun, 23 July 2023 15:24  |  
			| 
				
				
					|  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) Если совпадений не, значит их нет. Идем к следующей ячейке.
 Помогите решить задачу.
 
 
 
 
 |  
	|  |  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  | 
 
 
 Текущее время: Fri Oct 31 15:58:58 GMT+3 2025 
 Общее время, затраченное на создание страницы: 0.01244 секунд |