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

Откуда: Feorina "Fury" 161
Сообщений: 4374
Запрос. Работает корректно, правильно:
With Tree (Parent_ID, ID, level, Fullname)
    as
    (
        Select Parent_ID, ID, 0 as level, FullName, IsLeaf from dict_People
        where ID = @NodeID 
        
        union all
        Select dict_People.Parent_ID, dict_People.ID, level + 1, dict_People.FullName from dict_People
        Inner Join Tree on dict_People.Parent_ID = Tree.ID
        where dict_People.ID != @NodeID
    )
    Select Tree.ID, Tree.Fullname, level from Tree
    where Tree.IsLeaf = 'TRUE'

Таблица:
Parent_ID ID Fullname
1 1 Дыректор
2 1 ЗамДир1
3 1 ЗамДир2
4 1 ЗамДир3
5 2 РукГруппы1
6 2 РукГруппы2
7 2 РукГруппы3
8 2 РукГруппы4
9 7 сотрудник1
10 7 сотрудник2
11 7 сотрудник3
12 7 сотрудник4
13 7 сотрудник5

Для @NodeID = 7, выдаст узлы (7, 9-13).
Хочу доработать запрос так, чтобы он ещё выдавал узлы 2 и 1, к которым (прямо или через кого-то) подчинен 7. Не могу додуматься, как
24 апр 14, 11:39    [15927704]     Ответить | Цитировать Сообщить модератору
 Re: рекурсия, нужна помощь в маленько доработке запроса  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Charles Weyland,

ещё один UNION ALL внутри CTE добавьте.
Но связь не dict_People.Parent_ID = Tree.ID, а наоборот! :))
24 апр 14, 11:55    [15927871]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить