Моя база данных - MS SQL 2008.
Я в основном объединяю несколько наборов данных из двух или более баз данных, чтобы в итоге получить одного владельца набора данных, возможно связанного двумя полями.
Таблица
ID Name Code
1 Ben 1
2 Ben 1
3 Frank 1
4 Frank 2
5 Mark 2
6 Mary 3
7 Chuck 3
8 Rogue 10
9 Charles 11
Данные расположены не по порядку, значение «Родитель» не имеет значения, если оно имеется в каждой группе.
Дочерние элементы родителя - это набор записей, связанных одинаковым именем, одним и тем же кодом или обоими. Каждая запись может появиться только один раз в IE результата. не может принадлежать более чем одной группе.
Вот один из возможных результатов (иерархия не должна быть представлена таким образом):
ID Name Code ParentID
1 Ben 1 NULL
2 Ben 1 1
3 Frank 1 1
4 Frank 2 1
5 Mark 2 1
6 Mary 3 NULL
7 Chuck 3 6
Идентификатор записи {1} является родителем группы 1 (выбран из-за первого общего набора)
{2} имеет то же имя, поэтому оно включено (также может быть включено из-за того же кода)
{3} использует тот же код, поэтому он включен
{4} имеет то же имя, что и {3}, поэтому оно включено
{5} делит тот же код с {4}, поэтому он включен
{6} и {7} используют один и тот же код, поэтому создайте новую группу.
{8} и {9} исключены из результата, так как других общих записей нет.
Я думаю, что я нашел решение в работе, которое использует приблизительно 3 или 4 соединения этой таблицы на себя, и это довольно запутанно. Любые предложения о том, как справиться с этим? Я чувствую, может быть, использование рекурсивных CTE, но я не могу обернуть мой мозг вокруг него.