Я работаю с MS SQL Server 2014
.
У меня есть набор данных с названиями компаний, которые иногда усекаются из-за нехватки места в источнике.E.g. AAA PTY Ltd
иногда отображается как 'AAA PTY L'
, а иногда как исходное неусеченное имя, в зависимости от источника.Мне нужно заменить усеченные значения на длинные, где они усечены, чтобы избежать дублирования записей при сопоставлении с другими наборами данных.Заменить полные имена на усеченные легко, но мне нужно наоборот.
Я создал таблицу с длинными и усеченными именами, упорядочил ее по убыванию (чтобы длинные имена всегда появлялись перед усеченными) и добавил столбец для усеченных имен (имитирует усечение, где полное имяне было усечено).Я также создал флаг, чтобы указать, был ли он усечен, чтобы я мог легко идентифицировать записи, которые мне нужно обновить.Поэтому созданная мной таблица выглядит следующим образом:
|Id | FullName | Truncated name | TruncFlag|
|1 | AAA PTY Ltd | AAA PTY L | 1 |
|2 | AAA PTY L | AAA PTY L | 0 |
|3 | BBB PTY Ltd | BBB PTY L | 1 |
|4 | BBB PTY L | BBB PTY L | 0 |
Мне нужно заменить полное имя во второй и четвертой строках на полное имя в первой и третьей строках соответственно.
Я пытался сделать это с помощью JOINS
(subqeries
, считая количество полных имен на усеченное имя, имеющее счет> 1), а также с помощью циклов while, сохраняя усеченные и полные имена в переменных, но этовне моих возможностей.
Я бы хотел получить таблицу вроде (после обновления FullNames во второй и четвертой строках):
|Id | FullName | Truncated name | TruncFlag|
|1 | AAA PTY Ltd | AAA PTY L | 1 |
|2 | AAA PTY Ltd | AAA PTY L | 0 |
|3 | BBB PTY Ltd | BBB PTY L | 1 |
|4 | BBB PTY Ltd | BBB PTY L | 0 |