Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите с интересным селектом ;)  [new]
DiamondBK
Member

Откуда: Rostov-on-Don
Сообщений: 9
Например имеется таблица со значениями типа:
declare @table table
(
id int,parent_id int
)

insert into @table values
(1,null)
,(2,1)
,(3,2)
,(4,2)
,(5,1)
,(6,4)
,(7,4)
,(8,1)

--------------------------
необходимо получить результат в виде(уровень вложенности parent_id неограничен) :

select 1,'0' union all
select 2,'1' union all
select 3,'1,2' union all
select 4,'1,2,3' union all
select 6,'1,2,3,4' union all
select 7,'1,2,3,4,5' union all
select 5,'1' union all
select 8,'1'
29 авг 11, 14:20    [11195099]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с интересным селектом ;)  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
DiamondBK, читайте по поводу рекурсивного CTE
29 авг 11, 14:28    [11195143]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с интересным селектом ;)  [new]
Начинающий SQL 2008
Member

Откуда:
Сообщений: 438
DiamondBK
необходимо получить результат в виде(уровень вложенности parent_id неограничен) :

select 1,'0' union all
select 2,'1' union all
select 3,'1,2' union all
select 4,'1,2,3' union all
select 6,'1,2,3,4' union all
select 7,'1,2,3,4,5' union all
select 5,'1' union all
select 8,'1'
Не совсем понятно, как получается такой набор данных...


Рекурсивный CTE
declare @table table (id int,parent_id int)
insert into @table values (1,null),(2,1),(3,2),(4,2),(5,1),(6,4),(7,4),(8,1)

select * from @table

;with cte as (
select id, parent_id, 0 [lev]
from @table
where parent_id is null
union all
select t.id, t.parent_id, cte.lev+1
from @table t
inner join cte on t.parent_id = cte.id
)
select * from cte
29 авг 11, 17:02    [11196394]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с интересным селектом ;)  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
похоже он хочет во втором столбце путь от тек вершины до корня!
тогда надо писать outer apply и функцию рисующую для вершины путь до корня! =)
29 авг 11, 17:08    [11196436]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с интересным селектом ;)  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
всё это само собой впаять во вторую часть CTE! =)
29 авг 11, 17:08    [11196441]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с интересным селектом ;)  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
кстати селект так себе, типичное дерево =)
29 авг 11, 17:10    [11196456]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с интересным селектом ;)  [new]
Vaja
Member

Откуда:
Сообщений: 49
;with cte as (
select id, parent_id, 0 [lev], CONVERT(varchar(100),id) as ccrt
from @table
where parent_id is null
union all
select t.id, t.parent_id, cte.lev+1, CONVERT(varchar(100),cte.ccrt+ '.'+CONVERT(varchar(100),t.id)) as ccrt
from @table t
inner join cte on t.parent_id = cte.id
)
select * from cte
29 авг 11, 18:02    [11196970]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с интересным селектом ;)  [new]
DiamondBK
Member

Откуда: Rostov-on-Don
Сообщений: 9
Друзья, всем спасибо, принцип понятен :)
30 авг 11, 09:31    [11198917]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить