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

Откуда: Самара
Сообщений: 1287
как собрать все содержимое дерева, в Oracle есть connect by prior, а здесь?

к примеру есть дерево

GR1
GR1_Sub1
GR1_Sub2
GR1_Sub2_Sub1
GR1_Sub3
GR2
GR2_Sub1
GR2_Sub2
GR2_Sub3

каждая группа и подгруппа имеет какие то значения
все подгруппы принадлежат друг к другу PARENT_ID к ID

как написать правильно в MS SQL вывод всего содержимого группы GR1 со всеми вложениями

параметры из GR1
параметры из GR1_Sub1
параметры из GR1_Sub2
параметры из GR1_Sub2_Sub1
параметры из GR1_Sub3

вчера проделал в Oracle, все прекрасно, сегодня не могу проделать также в MS SQL, видимо не все операторы знаю, а может connect by prior нет?
4 июн 19, 12:28    [21901428]     Ответить | Цитировать Сообщить модератору
 Re: как собрать все содержимое дерева  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4535
yemets63, нету...
4 июн 19, 12:35    [21901435]     Ответить | Цитировать Сообщить модератору
 Re: как собрать все содержимое дерева  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
Рекурсивное CTE
4 июн 19, 12:38    [21901440]     Ответить | Цитировать Сообщить модератору
 Re: как собрать все содержимое дерева  [new]
yemets63
Member

Откуда: Самара
Сообщений: 1287
ну и как вывести, не заводить же трижды одну и ту же таблицу и бегать по ней по алиасам и самотреть, где кому принадлежит PARENT ID и кто в каком узлу лежит
4 июн 19, 12:54    [21901459]     Ответить | Цитировать Сообщить модератору
 Re: как собрать все содержимое дерева  [new]
msLex
Member

Откуда:
Сообщений: 7730
yemets63
к примеру есть дерево


Вы это "к примеру" лучше скриптом создания и заполнения таблицы представте. А то дерево можно по разному "нарисовать".
4 июн 19, 13:07    [21901472]     Ответить | Цитировать Сообщить модератору
 Re: как собрать все содержимое дерева  [new]
iap
Member

Откуда: Москва
Сообщений: 46953
Разве в Oracle нет рекурсивного CTE?
4 июн 19, 13:12    [21901477]     Ответить | Цитировать Сообщить модератору
 Re: как собрать все содержимое дерева  [new]
yemets63
Member

Откуда: Самара
Сообщений: 1287
iap,

я в оракле просто распечатываю дерево, Connect By Prior собирает его достаточно быстрои правильно, далее в скрипте вывожу параметры к каждому узлу. и все. а в MS SQL так несработало.

ладно. придумал я. всем спасибо
4 июн 19, 13:14    [21901482]     Ответить | Цитировать Сообщить модератору
 Re: как собрать все содержимое дерева  [new]
iap
Member

Откуда: Москва
Сообщений: 46953
Например:
WITH CTE(ID, ParentID,Name) AS
(
 SELECT ID, ParentID, 'GR'+CAST(ID AS VARCHAR(MAX)) FROM T WHERE ParentID IS NULL --Корни
 UNION ALL
 SELECT T.ID, T.ParentID, CTE.Name+'_'+T.Name
 FROM CTE JOIN T ON T.ParentID=CTE.ID
)
SELECT * FROM CTE;
4 июн 19, 13:23    [21901486]     Ответить | Цитировать Сообщить модератору
 Re: как собрать все содержимое дерева  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30774
yemets63
я в оракле просто распечатываю дерево, Connect By Prior собирает его достаточно быстрои правильно, далее в скрипте вывожу параметры к каждому узлу. и все. а в MS SQL так несработало.
В сиквеле так же, просто по другому называется.
4 июн 19, 17:54    [21901780]     Ответить | Цитировать Сообщить модератору
 Re: как собрать все содержимое дерева  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
yemets63,

MSDN: Использование рекурсивного обобщенного табличного выражения для отображения иерархического списка
5 июн 19, 10:05    [21902186]     Ответить | Цитировать Сообщить модератору
 Re: как собрать все содержимое дерева  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5634
iap
Разве в Oracle нет рекурсивного CTE?

Вполне себе есть, синтаксис почти такой же, как в MSSQL. Я лично его в основном и использую, а не connect by.
5 июн 19, 10:53    [21902241]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить