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

Откуда:
Сообщений: 44
Доброго времени суток!

Не подскажете ли, как можно узнать, содержит ли возвращаемая строка рекурсивного запроса подуровни?

Спасибо.
8 окт 09, 09:38    [7756813]     Ответить | Цитировать Сообщить модератору
 Re: CTE Recursion  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Зачем Вам надо это узнавать? Что за задачу решаете?
8 окт 09, 09:57    [7756900]     Ответить | Цитировать Сообщить модератору
 Re: CTE Recursion  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
declare @t table(id int, pid int, name varchar(10))
insert @t(id, pid, name)
select   1, null,   'item1' union all
select  11,    1,  'item11' union all
select  12,    1,  'item12' union all
select 111,   11, 'item111' union all
select 112,   11, 'item112'

;with cte as (
   select id, pid, name, 1 as lvl
     from @t
    where pid is null
   union all
   select t.id, t.pid, t.name, c.lvl + 1
     from @t as t
     join cte as c on c.id = t.pid
)
select c.id, c.pid, c.name, c.lvl as level
      ,case when exists(select 'не важно что'
                          from @t as t
                         where t.pid = c.id)
            then 'содержит подуровни'
            else 'не содержит подуровни'
        end as sublevel_exists
  from cte as c
   
id          pid         name       level       sublevel_exists
----------- ----------- ---------- ----------- ---------------------
1           NULL        item1      1           содержит подуровни
11          1           item11     2           содержит подуровни
12          1           item12     2           не содержит подуровни
111         11          item111    3           не содержит подуровни
112         11          item112    3           не содержит подуровни

(5 row(s) affected)
8 окт 09, 10:15    [7756997]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить