У меня есть таблица, в которой есть отношение родителя/ребенка, где каждая из данных столбца данных ExternalCategoryCode
должна быть объединена с родителями ExternalCategoryCode
.Обновление поля родительской записи с использованием данных записи ребенка (та же таблица)
Вот некоторые примеры данных, которые повреждены, в результате чего запись Родитель (Id = 96) ExternalCategoryCode
является NULL,. Отношения через ParentId
поля:
Id |Name |ExternalCategoryCode|ParentId
---|------------------------------|--------------------|---------
96 | Health & Personal Development| NULL | NULL
---|------------------------------|--------------------|---------
97 | Health | H1*;H2* | 96
---|------------------------------|--------------------|---------
98 | Personal Development | P1;P2;P3* | 96
---|------------------------------|--------------------|---------
99 | Other Health | OH* | 96
---|------------------------------|--------------------|---------
Данные должны выглядеть следующим образом:
Id |Name |ExternalCategoryCode |ParentId
---|------------------------------|----------------------|---------
96 | Health & Personal Development| H1*;H2*;P1;P2;P3*;OH*| NULL
---|------------------------------|----------------------|---------
97 | Health | H1*;H2* | 96
---|------------------------------|----------------------|---------
98 | Personal Development | P1;P2;P3* | 96
---|------------------------------|----------------------|---------
99 | Other Health | OH* | 96
---|------------------------------|----------------------|---------
правки:
- Уровень потомок может быть любыми глубокими уровнями, но глубоким детям потомкам необходимо обновить до основного родителя
ExternalCategoryCode
. Возьмите последние две записи ниже (Id = 100 и Id = 101) и ссылку наParentId
97. Поскольку Id = 97ParentId
IS NOT NULL, мы должны продолжать до дерева, пока мы найдите запись сParentId
из NULL (Top Most Parent). - Другой вопрос касался вопроса о том, могут ли верхние большинство родителей
ExternalCategoryCode
содержать дубликаты? Пример ниже показывает M2 * дважды. Это прекрасно, потому что наши библиотеки классов бизнес-логики отфильтровывают дубликаты, если найдут. Если запись имеет ссылку на его
ParentId
(т.е. является ребенком) но имеет NULLExternalCategoryCode
, эти коды могут быть проигнорированы.Id |Name |ExternalCategoryCode |ParentId ---|------------------------------|----------------------|--------- 96 | Health & Personal Development| H1*;H2*;P1;P2;P3*;OH*| NULL | | | | | M1;M2*; M2*;M3* | ---|------------------------------|----------------------|--------- 97 | Health | H1*;H2* | 96 ---|------------------------------|----------------------|--------- 98 | Personal Development | P1;P2;P3* | 96 ---|------------------------------|----------------------|--------- 99 | Other Health | OH* | 96 ---|------------------------------|----------------------|--------- 100| Medicine | M1;M2* | 97 ---|------------------------------|----------------------|--------- 101| Other Medicine | M2*;M3* | 97 ---|------------------------------|----------------------|--------- 102| Other Medicine 2 | NULL | 97 ---|------------------------------|----------------------|---------
Есть другие Родитель/Детские искаженной таблицы, а также. Как:
Script это вниз таблицы в вопросе и concatentate в родительских записей
ExternalCategoryCode
с ребенкомExternalCategoryCode
данных?Перечислите обновленные родительские записи.Обычно при использовании
UPDATED
, это просто показывает, что-то вроде этого, в результате чего я хотел бы сообщить об этом:(1 строка (ы) пострадавших)
Techology Im помощью:
- SQL Server
Насколько глубоким является уровень потомков? Например, 97 - это ребенок 96. Но тогда будет 101, который является потомком 97? Кроме того, будет ли случай, когда два ребенка имеют один и тот же код (например, H1), то будет ли код в родительском коде сокращать этот дубликат? – DVT
@ DVT Я отредактирую вопрос с ответами. – garfbradaz
Редактирование публикации. – garfbradaz