Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / hierarchyid Дерево организаций и подраздлений - только дочерние подразделения организации / 3 сообщений из 3, страница 1 из 1
07.12.2020, 10:48
    #40025163
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hierarchyid Дерево организаций и подраздлений - только дочерние подразделения организации
Добрый день, помогите пожалуйста с запросом.

В таблице хранится дерево организаций и подразделений.
Организации могут быть вложены в организации.
Код: 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.
CREATE TABLE DemoOrg
(
	id int,
    HierarchyPath hierarchyid NOT NULL,  
    Title nvarchar(30) NOT NULL,  
    OrgType nvarchar(9) NULL
);

INSERT DemoOrg VALUES   
-- Org1 и департаменты
(1, '/1/', 'Org1', 'org'),  
(3, '/1/1/', 'Org1_Dep1', 'dep'),  
(4, '/1/1/1/', 'Org1_Dep1_Dep1', 'dep'),  
(5, '/1/1/2/', 'Org1_Dep1_Dep2', 'dep'),  
(6, '/1/2/', 'Org1_Dep2', 'dep'),  
(7, '/1/2/1/', 'Org1_Dep2_Dep1', 'dep'),  
(8, '/1/2/1/1/', 'Org1_Dep2_Dep1_Dep1', 'dep'),  

-- вложенная организация в Org1
(9, '/1/3/', 'Org1_Org1', 'org'),  
(10, '/1/3/1/', 'Org1_Org1_dep1', 'dep'),  
(11, '/1/3/2/', 'Org1_Org1_dep2', 'dep'),  
(12, '/1/3/2/1/', 'Org1_Org1_dep2_dep1', 'dep'),  

-- Org2
(13, '/2/', 'Org2', 'org'),  
(14, '/2/1/', 'Org2_Dep1', 'dep');



Надо достать все подразделния и подразделения подразделений заданной организации. При этом не должно быть вложенных организаций и их подразделений.
Например для Org1 нужно достать

Код: plaintext
1.
2.
3.
4.
5.
3	0x5AC0		Org1_Dep1		dep
4	0x5AD6		Org1_Dep1_Dep1		dep
5	0x5ADA		Org1_Dep1_Dep2		dep
6	0x5B40		Org1_Dep2		dep
7	0x5B56		Org1_Dep2_Dep1		dep
8	0x5B56B0	Org1_Dep2_Dep1_Dep1	dep
...
Рейтинг: 0 / 0
07.12.2020, 11:51
    #40025171
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hierarchyid Дерево организаций и подраздлений - только дочерние подразделения организации
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
declare @OrgTitle nvarchar(30) = N'Org1';

with t as
(
select
 b.id, b.HierarchyPath, b.Title, b.OrgType
from
 (select HierarchyPath from @DemoOrg where OrgType = 'org' and Title = @OrgTitle) a join
 @DemoOrg b on b.HierarchyPath.GetAncestor(1) = a.HierarchyPath and b.OrgType = 'dep'

union all

select
 b.id, b.HierarchyPath, b.Title, b.OrgType
from
 t join
 @DemoOrg b on b.HierarchyPath.GetAncestor(1) = t.HierarchyPath and b.OrgType = 'dep'
)
select HierarchyPath.ToString(), * from t;
...
Рейтинг: 0 / 0
07.12.2020, 15:03
    #40025274
Alex_BBB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hierarchyid Дерево организаций и подраздлений - только дочерние подразделения организации
invm, спасибо!
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / hierarchyid Дерево организаций и подраздлений - только дочерние подразделения организации / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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