Во-первых, я прошу прощения, если предмет этого вопроса не ясен или использует неправильную терминологию, но я не совсем уверен, что то, что я пытаюсь сделать, называется.Я использую SQL Server 2016. У меня есть таблица, которая имеет следующие три столбца:
create table #temp (PrevID varchar(10),ID varchar(10), NextID varchar(10))
insert into #temp
Select NULL,'ABC1','ABC3' Union all
Select NULL,'ABC2','ABC4' Union all
Select 'ABC1','ABC3','ABC9' Union all
Select 'ABC2','ABC4','ABC10' Union all
Select 'ABC3','ABC9',NULL Union all
Select 'ABC4','ABC10','ABC25' Union all
Select 'ABC10','ABC25',NULL
PrevID |ID | NextID
NULL |ABC1 | ABC3
NULL |ABC2 | ABC4
ABC1 |ABC3 | ABC9
ABC2 |ABC4 | ABC10
ABC3 |ABC9 | NULL
ABC4 |ABC10| ABC25
ABC10 |ABC25| NULL
Что я хочу сделать, это получить выходные данные идентификаторов, которые связаны друг с другом.Я не могу просто отсортировать по ID в порядке возрастания, потому что ABC1 и ABC2 являются частью двух разных цепочек, и хотя каждая цепочка является последовательной, они не являются непрерывными.
Обычно я бы использовал CTE или подзапрос для объединения таблицы ссама по себе, чтобы иметь возможность выполнять запросы к следующей или предыдущей записи, однако нет конкретного ограничения на количество записей, которые будут частью цепочки, и поэтому я не могу знать заранее, сколько раз мне потребуется присоединиться к таблице.К сожалению, я также не могу изменить структуру таблицы, чтобы добавить ChainID.
Желаемый результат будет выглядеть примерно так:
ChainID|PrevID |ID | NextID
Chain1 |NULL |ABC1 | ABC3
Chain1 |ABC1 |ABC3 | ABC9
Chain1 |ABC3 |ABC9 | NULL
Chain2 |NULL |ABC2 | ABC4
Chain2 |ABC2 |ABC4 | ABC10
Chain2 |ABC4 |ABC10| ABC25
Chain2 |ABC10 |ABC25| NULL
Спасибо, и я ценю любую помощь
- отредактировано, чтобы включить код, который я использовал для создания таблицы, например