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

Откуда:
Сообщений: 1368
что не могу до конца сообразить
ка из
12 10
10 0
11 10
5 0
25 5
22 0
35 25

получить:

10 0
11 10
12 10
5 0
25 5
35 25
22 0


т.е в втором столбце зависимость, от первого. что -то в этом роде .
через cte что-то недокумекаю как сделать.
26 авг 13, 15:08    [14755974]     Ответить | Цитировать Сообщить модератору
 Re: запрос составить через рекурсию  [new]
Гость333
Member

Откуда:
Сообщений: 3683
смотрю_тут,

С точки зрения языка SQL эти два набора данных эквивалентны.
Задача перед вами какая стоит?
26 авг 13, 15:15    [14756029]     Ответить | Цитировать Сообщить модератору
 Re: запрос составить через рекурсию  [new]
смотрю_тут
Member

Откуда:
Сообщений: 1368
Гость333
смотрю_тут,

С точки зрения языка SQL эти два набора данных эквивалентны.
Задача перед вами какая стоит?

да кстати),
ошибся.

результат :
10 0
11 10
12 10
5 0
25 5
35 25

Это что дерева блокировок, выстроить его,
id 11,12 ждут 10-го
25 ждет 5-го
35 ждет 25
26 авг 13, 16:30    [14756574]     Ответить | Цитировать Сообщить модератору
 Re: запрос составить через рекурсию  [new]
MrGuest
Guest
смотрю_тут,

Складывается ощущение, что Вам нужна просто определенная сортировка.
А про рекурсию почитайте например это: http://msdn.microsoft.com/ru-ru/library/ms186243
26 авг 13, 16:42    [14756662]     Ответить | Цитировать Сообщить модератору
 Re: запрос составить через рекурсию  [new]
смотрю_тут
Member

Откуда:
Сообщений: 1368
из этого :

id spid1spid2
1 10 0
2 11 10
3 12 10
4 5 0
5 25 5
6 35 25
7 22 0

получил:
spid1blklvl
10 0 1
5 0 1
25 5 1
35 25 2
25 5 2
11 10 2
12 10 2
35 25 3


сделал запрос:

  select * from dbo.blktbl
select id,spid2 into #t from  dbo.blktbl where spid2<>0
;with cte (spid,blk,lvl)
as 
( select spid1,spid2, 1 as level from blktbl  t1 where spid1 in (select spid2 from #t)
union all 
select t.spid1 ,t.spid2, c.lvl+1 from cte c 
inner join blktbl t on t.spid2=c.spid

)


select  * from cte order by lvl

drop table #t


как результат упорядочить до , а точнее сгруппировать ?:
10 0 1
11 10 2
12 10 2
5 0 1
25 5 1
25 5 2
35 25 2
35 25 3
28 авг 13, 17:12    [14767227]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить