powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / hierarchyid Дерево организаций и подраздлений - только дочерние подразделения организации
3 сообщений из 3, страница 1 из 1
hierarchyid Дерево организаций и подраздлений - только дочерние подразделения организации
    #40025163
Alex_BBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, помогите пожалуйста с запросом.

В таблице хранится дерево организаций и подразделений.
Организации могут быть вложены в организации.
Код: 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
hierarchyid Дерево организаций и подраздлений - только дочерние подразделения организации
    #40025171
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
hierarchyid Дерево организаций и подраздлений - только дочерние подразделения организации
    #40025274
Alex_BBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm, спасибо!
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / hierarchyid Дерево организаций и подраздлений - только дочерние подразделения организации
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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