powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Parent-child запрос c Root_Parent_child
5 сообщений из 5, страница 1 из 1
Parent-child запрос c Root_Parent_child
    #39788924
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день всем.

Есть станд. иерархическая таблица.
Есть много рутов в иеррахиии ( 1,2 ,3 ,4 ... ) c Parent_Org_Id == Null

Запрос раскручивающий есть и понятен.
Надо достать еще одно поле родителя верхней иерархии - т.е все записи долждны остаться
+ новое поле Root_Parent_child

2 - корневая
201 , 202
2010, 2011 , 2020 , 2021
20101, ...

т.е для всех последних трех строк надо достать 2 - как Root Parent

Не могу сообразить как это сделать
Желательно красиво в одном запрос но можно и с Temp таблицами

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
CREATE TABLE dwh.DimOrganization(
	Org_Id int  NOT NULL, -- IDENTITY(1,1)
	Parent_Org_Id int NULL,
	Src_Org_ID uniqueidentifier NOT NULL,
	Org_Name nvarchar(500) NOT NULL,
	Org_level tinyint  NOT NULL,
,CONSTRAINT PK_DimOrganization PRIMARY KEY    (	Org_Id  )
)

With CTE
AS
(
SELECT Org_Id,Parent_Org_Id,Org_Name, 1 AS level,CAST(Org_Name AS varchar(max)) AS Org_Path
FROM dwh.DimOrganization 
WHERE 
Parent_Org_Id is Null --  Roots Org_Id = Parent_Org_Id 
UNION ALL
SELECT e.Org_Id,e.Parent_Org_Id,e.Org_Name,c.Level + 1
, CAST(c.Org_Path + '/' + e.Org_Name AS varchar(max))
FROM CTE c
INNER JOIN dwh.DimOrganization  e
	ON e.Parent_Org_Id = c.Org_Id 
WHERE 
1=1 -- e.Parent_Org_Id <> e.Org_Id
AND c.level < 5 -- THIS PREVENTS THE RECURSION FROM RUNNING
)
Select * From CTE
ORDER BY level , Org_Id
...
Рейтинг: 0 / 0
Parent-child запрос c Root_Parent_child
    #39789042
Guf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федор,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
With CTE
AS
(
SELECT Org_Id AS Root, Org_Id,Parent_Org_Id,Org_Name, 1 AS level,CAST(Org_Name AS varchar(max)) AS Org_Path
FROM dwh.DimOrganization 
WHERE 
Parent_Org_Id is Null --  Roots Org_Id = Parent_Org_Id 
UNION ALL
SELECT c.Org_Id AS Root, e.Org_Id,e.Parent_Org_Id,e.Org_Name,c.Level + 1
, CAST(c.Org_Path + '/' + e.Org_Name AS varchar(max))
FROM CTE c
INNER JOIN dwh.DimOrganization  e
	ON e.Parent_Org_Id = c.Org_Id 
WHERE 
1=1 -- e.Parent_Org_Id <> e.Org_Id
AND c.level < 5 -- THIS PREVENTS THE RECURSION FROM RUNNING
)
Select * From CTE
ORDER BY level , Org_Id
...
Рейтинг: 0 / 0
Parent-child запрос c Root_Parent_child
    #39789052
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guf,

Root Org_Id Parent_Org_Id
1 1 NULL
2 2 NULL
1 101 1
1 102 1
2 201 2
2 202 2

ниже не так
202 2002 202
202 2003 202
201 2010 201
201 2011 201
201 2012 201
2010 100000 2010
2010 100001 2010
2010 100002 2010

Root == Parent_Org_Id - что вобщем видно из кода
А мне надо чтобы в нижнем куске в Root == 2
т.е как-то раскрутить чайлды вверх до root 2
...
Рейтинг: 0 / 0
Parent-child запрос c Root_Parent_child
    #39789111
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
With CTE
AS
(
SELECT Org_Id AS Root, Org_Id,Parent_Org_Id,Org_Name, 1 AS level,CAST(Org_Name AS varchar(max)) AS Org_Path
FROM dwh.DimOrganization 
WHERE 
Parent_Org_Id is Null --  Roots Org_Id = Parent_Org_Id 
UNION ALL
SELECT c.Root, e.Org_Id,e.Parent_Org_Id,e.Org_Name,c.Level + 1
, CAST(c.Org_Path + '/' + e.Org_Name AS varchar(max))
FROM CTE c
INNER JOIN dwh.DimOrganization  e
	ON e.Parent_Org_Id = c.Org_Id 
WHERE 
1=1 -- e.Parent_Org_Id <> e.Org_Id
AND c.level < 5 -- THIS PREVENTS THE RECURSION FROM RUNNING
)
Select * From CTE
ORDER BY level , Org_Id


так, чтоле ?
...
Рейтинг: 0 / 0
Parent-child запрос c Root_Parent_child
    #39789146
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
court,
+1
результат правильный
СПС и Guf

сижу думаю вот элементарно вроде а фиг
все просто когда знаешь
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Parent-child запрос c Root_Parent_child
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]