Многоуровневые родительско-дочерние отношения - PullRequest
0 голосов
/ 04 июля 2018

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

enter image description here

Я хочу вывести иерархию следующим образом:

a - c - x1
a - c - x2
a - d - y1
a - d - y2
b - e - z
b - f - q

Я немного искал примеры CTE, но они перечисляют только (2,2) -комбинацию иерархии. Как я могу достичь этого результата, не завися от глубины родитель-потомок?

1 Ответ

0 голосов
/ 04 июля 2018

Вы хотите использовать рекурсивный CTE.

Следующие получают все пути:

with cte as (
      select cast(child as varchar(max)) as path, child, 1 as lev
      from t
      where parent is null
      union all
      select cast(cte.path + ' - ' + t.child as varchar(max)), t.child, lev + 1
      from cte join
           t
           on cte.child = t.parent
     )
select *
from cte;

Если вы просто хотите, чтобы пути к конечным листьям:

select *
from cte
where not exists (select 1
                  from t
                  where t.parent = cte.child
                 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...