@Nosezz

Как уменьшить кол-во case'ов, и просто подтянуть по другой таблице?

Приветствую всех, подскажите люди добры как мне уменьшить код и вместо большого кол-ва Case'ов:
66978e2ed7577136763893.jpeg
Я достал со столбца "Откуда поступило, автор обращения" компании, и далее ручками их сгруппировал через миллион Case'ов.
Но меня осенило что можно попробовать сделать тоже самое, но не руками, а подтягивая с другой таблицы. Но как сделать - ума не приложу. Формат таблицы вот:
66978ea0e7c65311471204.jpeg
И как бы теперь просто обращаясь к столбцу "Откуда поступило, автор обращения", сразу сгруппировать по компаниям из таблицы._.
Проблема что в столбце "Откуда поступило, автор обращения" пишут по разному, по этому руками через like '%name%' доставал. Помогите люди добрые, как подтянуть с таблицы и сделать тоже самое короче <3
  • Вопрос задан
  • 119 просмотров
Пригласить эксперта
Ответы на вопрос 2
@alexalexes
Делаете две таблицы:
1. Фирма-отправитель Company_Sender
id - идентификатор компании
name - наименование компании

2. Шаблоны поиска отправителя Sender_Template
id - идентификатор шаблона
template - текст шаблона
company_id - идентификатор фирмы-отправителя

Искать потом можно таким запросом, либо делать Update на какое-нибудь поле в t для пометки результата:
select t.*, 
(select Cs.Name
   from Sender_Template St
   join Company_Sender Cs on Cs.Id = St.Company_Id 
  where  t.baza like St.template
  limit 1
) as Sender_Name -- если null, значит ни один шаблон не подошел
from t

PS: Это самый примитивный вариант автоматизации like. Нельзя задавать шаблоны за пределами возможностей синтаксиса like. Нужно как-то отличать дубликаты, если будет определение на больше чем один шаблон.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Данный SQL запрос - это конечно ужас-ужас и кроме того здесь есть такие
справочные сведенья которые надо-бы не хардкодить в коде а фиксировать
во таблицах справочниках. Иначе через некоторое время будет противоречие.
Код будет отставать от актуального положения вещей.

Тебе на самом деле выгоднее не делать select а сделать один раз процессинг таблицы
и декодировать поле baza один раз и сохранить его в другое поле.

Это кажется называется enrichment. Обогащение. Хранимой процедурой можно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы