Обновление таблицы на основе 2 таблиц с помощью RowID - это обычное явление - PullRequest
0 голосов
/ 27 июля 2010

У меня есть такая таблица:

RowID; ListDescription1; ListNormalisedDescription1;
1      XXXX       YYYY   NULL
2      ZZZZZ             NULL

Я сделал сложное преобразование / нормализацию (убрав пробелы, заменив пробел и разделив) и сумев превратить те же данные в:

RowID; NormalisedItemDescrption1;
1      XXXX
1      YYYY
2      ZZZZZ

Как вы видите, сходство между этими двумя таблицами - RowID.

Я хочу обновить ListNormalisedDescription1 на основе таблицы, поэтому станьте:

RowID; ListDescription1; ListNormalisedDescription1;
1      XXXX       YYYY   XXXX;YYYY
2      ZZZZZ             ZZZZZ

Обратите внимание, что разделитель находится в ';'

Я пытаюсь избежать курсора, если это возможно.

Спасибо

1 Ответ

2 голосов
/ 27 июля 2010

Предполагая SQL Server 2005+, используйте:

UPDATE table
   SET ListDescription1 = STUFF(ISNULL(SELECT ' ' + x.NormalisedItemDescrption1
                                         FROM NORMALIZED_TABLE x
                                        WHERE x.rowid = rowid
                                     GROUP BY x.NormalisedItemDescrption1
                                      FOR XML PATH ('')), ''), 1, 2, ''),
       ListNormalisedDescription1 = STUFF(ISNULL(SELECT ';' + x.NormalisedItemDescrption1
                                                   FROM NORMALIZED_TABLE x
                                                  WHERE x.rowid = rowid
                                               GROUP BY x.NormalisedItemDescrption1
                                                FOR XML PATH ('')), ''), 1, 2, '') 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...