Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 CTE рекурсия - получить значение строки не по порядку рекурсии  [new]
Кхе
Guest
declare @data table(id int identity(1,1),value int, parentId int)
insert into @data(value,parentId)
select 1,null
union all
select 2,null
union all
select 3,null
union all
select 4,2

;with cte
as(
select
id
,value
,parentId
from @data d
where
	d.id=1
union all
select
d.id
,c.value + d.value value
,d.parentId
from @data d
	inner join cte c on d.id=c.id+1
)

select * from cte


На данный момент в строке 4 поле value= 10 = 6 (из строки 3) + 4 (из строки 4).Собственно что и ожидаем от рекурсии cte

Можно ли как то и как получить в строке 4 value= 7 = 3 (из строки parentId=2) + 4 (из строки 4).
21 дек 16, 12:24    [20031348]     Ответить | Цитировать Сообщить модератору
 Re: CTE рекурсия - получить значение строки не по порядку рекурсии  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Так что-ли?
WITH 
cte AS (
SELECT
  [id],
  [parentId],
  [value] = SUM( [value] ) OVER ( ORDER BY [id] )
FROM
  @data
WHERE
	[parentId] IS NULL
UNION ALL
SELECT
  d.[id],
  d.[parentId],
  [value] = d.[id] + cte.[value]
FROM
  cte
	INNER JOIN @data d ON (
    d.[parentId] = cte.[id] )
)
SELECT * FROM cte
21 дек 16, 13:32    [20031730]     Ответить | Цитировать Сообщить модератору
 Re: CTE рекурсия - получить значение строки не по порядку рекурсии  [new]
гм,
Guest
declare @data table(id int identity(1,1),value int, parentId int)
insert into @data(value,parentId)
select 1,null
union all
select 2,null
union all
select 3,null
union all
select 4,2


;with cte
as(
select
id
,value
,parentId
from @data d
where
	d.id=1
union all
select
d.id
,c.value + d.value value
,d.parentId
from @data d
	inner join cte c on d.id=c.id+1
where d.parentId is null 

union all

select
d.id
,c.value + d.value value
,d.parentId
from @data d
	inner join cte c on c.id=d.parentId
)

select * from cte
21 дек 16, 23:46    [20034567]     Ответить | Цитировать Сообщить модератору
 Re: CTE рекурсия - получить значение строки не по порядку рекурсии  [new]
Кхе
Guest
гм,,

Оу, спасибо, я что то был уверен, что нельзя делать рекурсию более чем одним union) Попробую
22 дек 16, 09:10    [20035107]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить