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

CREATE TABLE #TREE (Id varchar(36), ParentId varchar(36),  TheName varchar(300))
INSERT  INTO #TREE SELECT 'B129D19B-8C1F-43DF-BBEB-0DBE571A7E42', NULL, 'Животные'
INSERT  INTO #TREE SELECT 'B129D19B-8C1F-43DF-BBEB-0DBE571A4567', NULL, 'Гибы'
INSERT  INTO #TREE SELECT '507AEC62-FF8D-479E-97DA-322F284B471A', NULL, 'Растения'
INSERT  INTO #TREE SELECT 'BD959AFD-C52F-448C-9EAA-48EB94663B5C', 'B129D19B-8C1F-43DF-BBEB-0DBE571A7E42', 'Кошки'
INSERT  INTO #TREE SELECT 'C79E75BE-BE07-4CB4-9E2E-5BE0C51FF140', '507AEC62-FF8D-479E-97DA-322F284B471A', 'Ягоды'
INSERT  INTO #TREE SELECT '4610CD02-443C-4E42-BF45-96735F3601F2', 'BD959AFD-C52F-448C-9EAA-48EB94663B5C', 'Сибирский Кот'
INSERT  INTO #TREE SELECT '24CCA1E7-D43B-4111-B5DB-DEE978CD925A', 'C79E75BE-BE07-4CB4-9E2E-5BE0C51FF140', 'Клубника'
INSERT  INTO #TREE SELECT '62BA94F3-318C-47B4-B11D-EFDA3585E4CD', 'BD959AFD-C52F-448C-9EAA-48EB94663B5C', 'Персы'
INSERT  INTO #TREE SELECT '367B81E4-D51D-4753-9A27-F3F9390A8960', 'C79E75BE-BE07-4CB4-9E2E-5BE0C51FF140', 'Земляника'
INSERT  INTO #TREE SELECT '563B81E4-D51D-4252-9A27-AB2390A7475', 'B129D19B-8C1F-43DF-BBEB-0DBE571A4567', 'Вешенки'

;WITH CTE AS 
(
SELECT Id AS ID,  1 AS Lvl, ParentID AS ParentID , TheName AS TheName from #TREE WHERE ParentId IS NULL 
UNION ALL 
SELECT   T.ID AS ID,  Lvl + 1  AS LVL  ,  T.ParentId AS ParentID  ,   T.TheName  AS TheName from CTE C  
INNER JOIN #TREE T ON T.ParentId = C.ID 
)
SELECT * FROM CTE
 


Как перевести вот такой справочник в плоскую таблицу, с путями в HIERARCHYID?
26 янв 18, 17:48    [21142495]     Ответить | Цитировать Сообщить модератору
 Re: Помогите размотать иерархию в плоскую таблицу  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
если попробовать почитать доку, то там даж пример есть преобразование таблицы в иерархическую структуру
26 янв 18, 19:59    [21142686]     Ответить | Цитировать Сообщить модератору
 Re: Помогите размотать иерархию в плоскую таблицу  [new]
MeGusta
Guest
Вообще не помогает, плохая дока.

Например, там на входе цифры, а у меня гуиды.
Например, GetRoot() начинает иерархию с 0х, а пример не предлагает варианта, когда у нас несколько "корней" в одной таблице.
Таким образом оказывается, что "СибирскийКот" и "Земляника" сидят в одной ветке.
29 янв 18, 09:08    [21146081]     Ответить | Цитировать Сообщить модератору
 Re: Помогите размотать иерархию в плоскую таблицу  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3462
MeGusta
DROP TABLE #TREE

CREATE TABLE #TREE (Id varchar(36), ParentId varchar(36),  TheName varchar(300))
INSERT  INTO #TREE SELECT 'B129D19B-8C1F-43DF-BBEB-0DBE571A7E42', NULL, 'Животные'
INSERT  INTO #TREE SELECT 'B129D19B-8C1F-43DF-BBEB-0DBE571A4567', NULL, '[color=red][b]Гибы[/b][/color]'
INSERT  INTO #TREE SELECT '507AEC62-FF8D-479E-97DA-322F284B471A', NULL, 'Растения'
INSERT  INTO #TREE SELECT 'BD959AFD-C52F-448C-9EAA-48EB94663B5C', 'B129D19B-8C1F-43DF-BBEB-0DBE571A7E42', 'Кошки'
INSERT  INTO #TREE SELECT 'C79E75BE-BE07-4CB4-9E2E-5BE0C51FF140', '507AEC62-FF8D-479E-97DA-322F284B471A', 'Ягоды'
INSERT  INTO #TREE SELECT '4610CD02-443C-4E42-BF45-96735F3601F2', 'BD959AFD-C52F-448C-9EAA-48EB94663B5C', 'Сибирский Кот'
INSERT  INTO #TREE SELECT '24CCA1E7-D43B-4111-B5DB-DEE978CD925A', 'C79E75BE-BE07-4CB4-9E2E-5BE0C51FF140', 'Клубника'
INSERT  INTO #TREE SELECT '62BA94F3-318C-47B4-B11D-EFDA3585E4CD', 'BD959AFD-C52F-448C-9EAA-48EB94663B5C', 'Персы'
INSERT  INTO #TREE SELECT '367B81E4-D51D-4753-9A27-F3F9390A8960', 'C79E75BE-BE07-4CB4-9E2E-5BE0C51FF140', 'Земляника'
INSERT  INTO #TREE SELECT '563B81E4-D51D-4252-9A27-AB2390A7475', 'B129D19B-8C1F-43DF-BBEB-0DBE571A4567', 'Вешенки'

;WITH CTE AS 
(
SELECT Id AS ID,  1 AS Lvl, ParentID AS ParentID , TheName AS TheName from #TREE WHERE ParentId IS NULL 
UNION ALL 
SELECT   T.ID AS ID,  Lvl + 1  AS LVL  ,  T.ParentId AS ParentID  ,   T.TheName  AS TheName from CTE C  
INNER JOIN #TREE T ON T.ParentId = C.ID 
)
SELECT * FROM CTE
 


Как перевести вот такой справочник в плоскую таблицу, с путями в HIERARCHYID?


"Гибы" - Мэлы Гибсоны
29 янв 18, 16:17    [21147802]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить