Как помочь реализовать больше логики в моих объединениях? - PullRequest
0 голосов
/ 22 октября 2019

В моем SQL-выражении есть некоторая логика, которая убирает все знаки препинания, поэтому я могу легко сравнить два поля;тем не менее, у меня возникла проблема, когда моя таблица A имеет название банка BBVA BANCOMER SA INSTITUCION DE BANCA MULTIPLE, GRUPO FINANCIERO BBVA BANCOMER, а моя таблица B - имя учреждения, BBVA BANCOMER и другие варианты, которые не соответствуют таблице A.

Iесть несколько разных названий банков с этой проблемой.

Как мне добавить like '%<bank name here>%' в мое объединение, чтобы найти все совпадения? Спасибо.

SELECT B.RECORD_KEY, A.[R.F.C.], A.[Bank Name]
FROM srcENRICH.dbo.FICO_BNKA_RFC_E AS A
INNER JOIN dbo.BM_BNKA_SRCENRICH_BM_SWIFT_S AS B
   ON REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(sA.[Bank Name], ',', ''), '.', ''), '-', ''), '+', ''), '/', ''), '''', ''), '&', 'AND'), '(', ''), ')', '') 
                    = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(B.INSTITUTION_NAME, ',', ''), '.', ''), '-', ''), '+', ''), '/', ''), '''', ''), '&', 'AND'), '(', ''), ')', '')

Я думал, может быть, WHERE предложение;однако я не знаю, как сравнить два поля вместе на основе функции LIKE. Если бы я нашел решение для этого, нужно ли мне делать то же самое для каждого необходимого банка?


В настоящее время я получаю только 31 матч, основываясь на исключении пунктуации;Тем не менее, мой ожидаемый результат выше 1650. Это связано с тем, что BANCOMER не имеет совпадений нигде, основываясь исключительно на точном имени, однако, когда я захожу в базу данных таблицы B, для ~ 1016 * выводится ~ 1600 выходных данных. Мне нужно реализовать функцию LIKE.

Ответы [ 4 ]

3 голосов
/ 22 октября 2019

Я думаю, что вам нужна таблица поиска, которая дает вам одинаковые значения. Затем вы можете заполнить эту таблицу таким образом, который определяет ваши бизнес-правила.

Например, рассмотрим следующую таблицу LOOKUP.

CODE VALUE
---- -----
1    BOA
1    BANK OF AMERICA
2    CITIBANK
2    CITI

Тогда у вас может быть такой запрос:

 SELECT *
 FROM TABLEA A
 JOIN LOOKUP ALOOK ON A.BANK = ALOOK.VALUE
 JOIN LOOKUP BLOOK ON ALOOK.CODE = BLOOK.CODE
 JOIN TABLEB B     ON B.BANK= BLOOK.BANK

Теперь у нас есть соединения A и B на BOA= БАНК АМЕРИКИ и СИТИБАНК = CITI

Вы можете продолжать добавлять новые сущности в таблицу LOOKUP, когда вы «находите» их и хотите, чтобы они объединялись.

Используя таблицу поиска в этомна серверах SQL намного быстрее, чем запуск функции (или нескольких функций), как в примере кода.

0 голосов
/ 23 октября 2019

Сколько у вас не совпадающих названий банков? Вы получите больше информации о банке?

К сожалению, нет идеального способа решить эту проблему. Ваше замененное имя должно работать в некоторой степени, но если есть некоторые опечатки или имя сокращено, например, «LLC» и «LL», замененное имя все еще не является надежным.

Раньше у меня была такая же проблема, например, когда я получаю новую банковскую информацию, она не распознается в банковской таблице.

Как я решил свою проблему:

  1. Создайте таблицу для хранения всех псевдонимов и правильных имен для банка (потребуется ручное усилие) Столбец: Правильное имя,псевдоним, ...

  2. Напишите триггер, чтобы отслеживать все сделанные изменения. Если кто-то изменит название банка, это изменение будет автоматически сохранено в приведенной выше таблице.

  3. По мере того, как будет собираться все больше и больше информации о банке, она будет легко сопоставлена.

0 голосов
/ 22 октября 2019

Возможно, достаточно использовать like:

SELECT B.RECORD_KEY, A.[R.F.C.], A.[Bank Name]
FROM srcENRICH.dbo.FICO_BNKA_RFC_E br JOIN
     dbo.BM_BNKA_SRCENRICH_BM_SWIFT_S ms
     ON br.bankname LIKE '%' + bs.bankname + '%'

Если неясно, какой банк какой - то, который является более коротким именем и который является более сложным именем.

0 голосов
/ 22 октября 2019

Вы можете добавить дополнительные условия к JOIN

SELECT *
FROM T1
JOIN T2
  ON  T1.fieldA = T2.fieldA
 AND  T1.fieldB = Somefunction(T2.fieldB)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...