2015-06-25 4 views
1

Попытка выяснить, могу ли я построить некоторую логику вокруг сопоставления этих столбцов. У меня есть 2 таблицыСоответствующие столбцы - в запросе

 Table A 
    Make    Model 
    BMW    2 Series 
    BMW    3 Series 
    BMW    3 Series GT 
    BMW    5 Series 
    BMW    5 Series GT 
    BMW    7 Series 
    Rolls-Royce  Other 
    Mini    Cooper 
    Mini    Coupe 


     Table B 
    Make   Series 
    BMW   2 Series 
    BMW   3 Series 
    BMW   5 Series 
    Bavarian Motor 7 Series 
    Rolls-Royce 42000 GT 
    Mini   Cooper 

Мне нужно извлечь вывод, как показано ниже и хранить в таблице

Output 
    Make    Model_A  Model_B 
    BMW    2 Series  2 Series 
    BMW    3 Series  3 Series 
    BMW    3 Series GT  3 Series 
    BMW    5 Series  5 Series 
    BMW    5 Series GT  5 Series 
    BMW    7 Series  7 Series 
    Rolls-Royce  Other   42000 GT 
    Mini    Cooper   Cooper 
    Mini    Coupe   Cooper 

По большей части, я мог бы соответствовать столбцы, используя ниже запроса:

 (A.SERIES like '%' + B.model + '%' 
     OR B.model like '%' + A.series + '%') 

Но это не относится к «Купе» против «Купера», Rolls-Royce и «BMW» против «Баварского двигателя».

Любая идея, как я могу обрабатывать все это в T-sql или в запросе? Soundex или любой алгоритм расстояния работает в этом случае - попробовал оба.

Я знаю, что я могу обрабатывать все случаи, используя «union all» для запуска в одном запросе, но ключ предназначен для обработки вышеуказанных случаев.

Заранее за вашу помощь. ~ Bee

+0

Вы должны исправить свои данные, чтобы у вас были правильные ключи «join». –

+0

Вы можете добавить таблицы ('NormalizedMakes',' NormalizedModels'), чтобы обеспечить нормализованные значения, например. 'Name' и' NormalizedName' и заполнять их соответственно '('BMW', 'BMW'), ('Bavarian Motor Werks', 'BMW'), ...'. Затем используйте их для поиска нормализованных значений для сравнения. Уродливый, требует постоянного обслуживания, вероятны столкновения, .... Или нарядите дезинфицирующее средство для рук. – HABO

+0

@ Gordon - к сожалению, исправление данных не является вариантом - его из нескольких источников. _ да, может добавить таблицу карт, но сохранение этого будет кошмаром. В любом случае, я могу определить, что купе и кооператив похожи? – Bee

ответ

0

почему бы не выполнить JOIN как на столе, как показано ниже, чтобы получить соответствующие модели и серии

select t1.Make,t1.Model as Model_A, 
t2.Series as Model_B 
from tableA t1 join tableB t2 
on t1.Make = t2.Make; 
0

Я скорее стесняюсь предложить, но она могла бы работать в вашей ситуации:

(A.SERIES like '%' + B.model + '%' 
    OR B.model like '%' + A.series + '%') or 
    SOUNDEX(A.series) = SOUNDEX(b.model) 

SOUNDEX() имеет так много проблем, что на самом деле нет причин для его использования - если вы не работаете в Бюро переписи и не хотите классифицировать фамилии для будущих ссылок с учетом вариантов правописания. Но вы можете найти это полезным для этой конкретной проблемы.

Смежные вопросы