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

Откуда:
Сообщений: 83
Здравствуйте. Скажите как вывести все листья на каждом зависимом уровне?

Например, ID, ParentID,Weight

1,0,2
2,1,3
3,1,4
4,2,2
5,3,3

Нужно, чтобы на 1 - были 4,5
На 2 - 4, 5
На 3 - 0
На 4 - 4
На 5 - 5

Спасибо.
13 дек 16, 22:16    [19999801]     Ответить | Цитировать Сообщить модератору
 Re: последние узлы в дереве  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Igorgg,

Если третье поле к задаче отношения не имеет, то либо рекурсивное cte. Либо цикл
14 дек 16, 01:50    [20000257]     Ответить | Цитировать Сообщить модератору
 Re: последние узлы в дереве  [new]
кролик-зануда
Guest
Igorgg,

а почему
Igorgg
На 3 - 0
14 дек 16, 09:27    [20000638]     Ответить | Цитировать Сообщить модератору
 Re: последние узлы в дереве  [new]
Igorgg
Member

Откуда:
Сообщений: 83
так от 3 не детей
14 дек 16, 10:10    [20000885]     Ответить | Цитировать Сообщить модератору
 Re: последние узлы в дереве  [new]
Igorgg
Member

Откуда:
Сообщений: 83
Можно вообще убрать колонку Weigth из расчета, чтобы не мешалась
14 дек 16, 10:11    [20000892]     Ответить | Цитировать Сообщить модератору
 Re: последние узлы в дереве  [new]
Igorgg
Member

Откуда:
Сообщений: 83
1,0
2,1
3,1
4,2
5,3
14 дек 16, 10:12    [20000898]     Ответить | Цитировать Сообщить модератору
 Re: последние узлы в дереве  [new]
Igorgg
Member

Откуда:
Сообщений: 83
Ошибка, на 3 - есть узел, потому, спасибо за замечание
14 дек 16, 10:13    [20000901]     Ответить | Цитировать Сообщить модератору
 Re: последние узлы в дереве  [new]
Igorgg
Member

Откуда:
Сообщений: 83
Как это на cte сделать?
14 дек 16, 10:16    [20000918]     Ответить | Цитировать Сообщить модератору
 Re: последние узлы в дереве  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Igorgg,

google - cte миллиард примеров
14 дек 16, 10:27    [20000997]     Ответить | Цитировать Сообщить модератору
 Re: последние узлы в дереве  [new]
Igorgg
Member

Откуда:
Сообщений: 83
Все решил.

WITH cte AS 
(
SELECT a.Id, a.parent_Id, a.Id as t1
FROM demos a 
UNION ALL
SELECT b.Id, b.parent_id,c.t1
FROM demos b 
INNER JOIN cte c ON b.parent_Id = c.id
) 
SELECT DISTINCT *
FROM cte 
where ID not in (Select xx.Parent_ID from cte xx where xx.t1 = t1)
order by t1 asc


Сообщение было отредактировано: 15 дек 16, 01:37
15 дек 16, 00:04    [20005024]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить