Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите написать CTE  [new]
Int23
Guest
Добрый день. Есть табличка такого вида
declare @Tab table
(
   ID bigint,
   Name varchar(50),
   Parent bigint
)

insert @Tab
select 1, 'Корень', null
union
select 2, 'Дочерний', 1
union
select 3, 'Лист', 2


Нужно для каждой строки собрать в плоть до корня значения. Т.е. для строки с ID=3 мне надо получить "Корень, Дочерний, Лист"

Как такое сделать через CTE?
19 июн 12, 13:30    [12737965]     Ответить | Цитировать Сообщить модератору
 Re: Помогите написать CTE  [new]
aleks2
Guest
declare @Tab table
(
   ID bigint,
   Name varchar(50),
   Parent bigint
)

insert @Tab
select 1, 'Корень', null
union
select 2, 'Дочерний', 1
union
select 3, 'Лист', 2

; with 
leafs as (select T.* from @Tab T left outer join @Tab T1 on T.ID = T1.Parent where T1.ID is null)
,
trees as (select L.ID as LeafID, L.Parent as ParentID, cast(L.Name as varchar(4000)) Name from leafs L
          union all
          select T.LeafID, X.Parent ParentID, cast(X.Name +', '+T.Name as varchar(4000)) as Name 
          from trees T inner join @Tab X on T.ParentID = X.ID
)

select * from trees where ParentID is null
19 июн 12, 13:46    [12738164]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить