Создать новую строку при обнаружении специального символа (например, "/") в поле - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь реплицировать запись всякий раз, когда сталкиваюсь с косой чертой в определенном поле.

История проблемы: я пытаюсь сравнить два списка данных, содержащих номер элемента, описание элемента,и серийный номер изделия.В одном списке содержится информация о количестве и статусе товара, в другом - информация о местонахождении товара, поэтому я пытаюсь сопоставить список местоположений с основным списком.Проблема в том, что оба списка были созданы независимо друг от друга, поэтому они оба имеют ошибки, и я смог только внутреннее объединение в SQL около 20%.Остальные не совпадают, потому что номер элемента неверен в одном или другом списке, в серийном номере может отсутствовать цифра в одном списке, и я не могу также очень хорошо сравнить номенклатуры, потому что можно сказать «Ручной ключ»"а другой мог бы сказать" гаечный ключ, 5 мм, гнездо ".

Кроме того, в одном списке данных есть несколько элементов, относящихся к какому-либо основному элементу, сохраненных в каждой записи.Они сделали это, сохранив несколько серийных номеров, разделенных косыми чертами, в поле серийного номера.

Попробовал использовать различие Левенштейна (нечеткое совпадение) в Alteryx для сопоставления серийного номера / номера изделия.Это создало слишком много ложных срабатываний, потому что серийные номера являются последовательными, номера предметов часто бывают неправильными, а описания предметов могут выглядеть похожими на человеческие, но длина символов может сильно отличаться (например, «Грузовик» в одном списке может не совпадать, еслив другом списке есть что-то вроде «Грузовик, 8-колесный, грузовой, бортовой»).

В настоящее время я пытаюсь просто сопоставить списки, если серийный номер в одном списке содержится в другом списке (с несколькимисерийные номера в поле серийного номера).

Пример кода SQLite, который я сейчас использую

select * from [MISSING ITEMS LIST] as a
left join [RFID TAG SCAN] as b on 
b.[SERIAL NUMBER] like '%' || (a.[SERIAL NUMBER] || '%')
where b.[SERIAL NUMBER] <> '' and b.[SERIAL NUMBER] is not null

Что я пытаюсь достичь:

Повторное копирование этой части сверху: таблица А может иметь следующее:

Record# Item#   Description   SN 
1,      156928,  Truck,       1234
2,      209344,  Truck Cover, 5588

И таблица B может иметь это

Record# Item#   Description SN 
1,      156928, Truck,      5588/01234

Чтобы сделать анализ немного проще, я хотел бы преобразовать таблицу B в это:

Record# Item#   Description SN 
1,      156928, Truck,      5588
1,      156928, Truck,      01234

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

Чтобы преобразовать таблицу B в нужный формат, используйте инструмент «Текст в столбцы»

enter image description here

В конфигурации установите разделитель на «/» и выберите «Разделить на строки»

enter image description here

0 голосов
/ 09 мая 2019

Если я предполагаю, что есть не более одного слэша, то в MariaDB вы можете сделать:

select Record, Item, Description
       substring_index(SN, '/', 1) as SN
from t
union all
select Record, Item, Description
       substring_index(SN, '/', -1) as SN
from t
where SN like '%/%';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...