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

Откуда: Бобруйск
Сообщений: 334
есть древовидная таблица
create table tabl (
       id int identity,
       info varchar(10),
       rootid int NULL,
       sumatr int
  )


наполняю ее данными для примера
INSERT INTO tabl
select  'root1', NULL, 50 
union all
select 'child12', 1, 10
union all
select 'child13', 1, 15
union all
select 'child14', 2, 5
union all
select 'child15', 2, 7
union all
select 'child16', 3, 15
union all
select 'root2', NULL, 60
union all
select 'child21', 7, 20
union all
select 'child22', 7, 15


в конечном виде имею дерево
1 root1 [NULL] 50
----|2 child12 1 10
----|----|4 child14 2 5
----|----|5 child15 2 7
----|3 child13 1 15
----|----|6 child16 3 15
7 root2 [NULL] 60
----|8 child21 7 20
----|9 child22 7 15

надеюсь дерево понятно изобразил

помогите пожалуйста написать запрос, который в рекурсии от родителя, считал бы у всех своих потомков по полю sumatr исключая родителя
таким образом я должен получить в идеале


id info rootid sumatr sumatr_child
1----|root1----|[NULL]----|50----|52
7----|root2----|[NULL]----|60----|35


я рассматривал через CTE, но что-то не выходит у меня никак.
9 дек 11, 16:20    [11738074]     Ответить | Цитировать Сообщить модератору
 Re: цикличное сумирование  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
возможно ли такое
?
9 дек 11, 16:28    [11738163]     Ответить | Цитировать Сообщить модератору
 Re: цикличное сумирование  [new]
Двоичник
Member

Откуда: Бобруйск
Сообщений: 334
Паганель
возможно ли такое
?


немного не то, тут нет цикличности. максимум углубление на один уровень. а в моем варианте углубление должно быть гораздо бОльшим.
12 дек 11, 10:24    [11747188]     Ответить | Цитировать Сообщить модератору
 Re: цикличное сумирование  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Двоичник
Паганель
возможно ли такое
?


немного не то, тут нет цикличности. максимум углубление на один уровень. а в моем варианте углубление должно быть гораздо бОльшим.
Это там, где рекурсивное CTE?
И что же ограничивает уровень рекурсии?
12 дек 11, 10:27    [11747207]     Ответить | Цитировать Сообщить модератору
 Re: цикличное сумирование  [new]
гость454545
Guest
Двоичник,

;with cte as
(select t.ID,t.rootid,t2.sumatr from tabl t join tabl t2 on t.id=t2.rootid
union all
select t.ID,t.rootid,cte.sumatr from tabl t join cte on t.id=cte.rootid)
select cte.id,t.info,t.sumatr,sum(cte.sumatr) child from cte
join tabl t on cte.id=t.id
where cte.rootid is null
group by cte.id,t.info,t.sumatr
go

id info sumatr child
1 root1 50 52
7 root2 60 35
12 дек 11, 15:45    [11750419]     Ответить | Цитировать Сообщить модератору
 Re: цикличное сумирование  [new]
Двоичник
Member

Откуда: Бобруйск
Сообщений: 334
вот-вот-вот оно, то самое... я знал что копать нужно в цте, только не собразил в какую сторону
спасибо тебе добрый человек
13 дек 11, 08:50    [11754151]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить