Кодирование заменить неправильно написанное на правильное из другой таблицы - PullRequest
0 голосов
/ 08 мая 2018

Как использовать SQL Server 2014, как я могу исправить написание значений в столбце (нужен код, пожалуйста)?

Ниже приведен пример моих данных:

 fID    Country 
 -------------------------------
 1      pakistan 
 2      bangladish (mar, 2016)
 3      vitnam (jul, 2015)
 4      hondoras (2000) 
 5      japan (apr, 2015) 
 6      marocco (2001)

Как видите, в столбце country есть орфографические ошибки. Мне нужно исправить эти орфографические ошибки, не меняя ничего другого - только названия стран.

Как это:

CorrectCountry
---------------
Morocco 
Bangladesh 
Vietnam 
Honduras

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

ПРИМЕЧАНИЕ : у меня более 2000 записей - я не могу исправить это вручную, также у стран 57 имен

Желаемая таблица:

fID     Country 
--------------------
 1      Pakistan 
 2      Bangladesh (mar, 2016)
 3      Vietnam (jul, 2015)
 4      Honduras (2000) 
 5      Japan (apr, 2015) 
 6      Morocco (2001)

1 Ответ

0 голосов
/ 08 мая 2018

Очень сложно пойти с полностью автоматизированным решением для этого запроса. Вы можете исправить данные в несколько итераций

Шаг 1: Отметить точно совпадающие записи. Это поможет сократить количество записей, которые вам нужны при ручном взаимодействии.

UPDATE t1 
SET t1.IsValidated = 1
FROM country t1
INNER JOIN CorrectCountry t2 ON T2.Country = T1.Country
WHERE ISNULL(t1.IsValidated,0) = 0
GO

Шаг 2: Отметьте совпавшие записи, используя SOUNDEX. Всегда требуется ручная проверка. просмотрите данные в списке выбора, прежде чем продолжить обновление

SELECT * FROM country t1
INNER JOIN CorrectCountry t2 ON SOUNDEX(T2.Country) = SOUNDEX(T1.Country)

UPDATE t1 
SET t1.Country = t2.Country
    , t1.IsValidated = 1
FROM country t1
INNER JOIN CorrectCountry t2 ON SOUNDEX(T2.Country) = SOUNDEX(T1.Country)
WHERE ISNULL(t1.IsValidated,0) = 0

GO

Шаг 3: Что еще ожидает рассмотрения? Я бы предложил сравнить вручную

SELECT * FROM country t1
WHERE ISNULL(t1.IsValidated,0) = 0
...