我有一个包含公司层次结构的表。决定使用这个平台,因为公司没有明确的级别数。该表运行良好,如果您在客户端使用级联列表,那就完美了。但是,我需要看一个“部分”,以及它拥有的所有其他“部分”。希望下面的信息能让您了解我需要做些什么。
表格默认
create table SECTION
(
SECTION_ID NUMBER(38) not null,
SECTION_NAME VARCHAR2(75) not null,
SECTION_MANAGER NUMBER(6) not null,
SECTION_LEVEL NUMBER(3) not null,
OWNER_SECTION_ID NUMBER(38)
)
数据
1 IT 901763 2 0
2 Business Systems 904241 3 1
3 Business Analysis 900813 4 2
4 Development 900976 4 2
5 Testing 907052 4 2
6 Systems Architecture 908012 4 2
7 Mobilisation 904241 4 2
8 Operations 900885 2 0
9 Area 2 900456 3 8
0 Executive 1 0 0
我需要看到的内容
0 Executive 1 8 Operations
0 Executive 1 1 IT
0 Executive 1 0 Executive
0 Executive 1 2 Business Systems
0 Executive 1 7 Mobilisation
0 Executive 1 6 Systems Architecture
0 Executive 1 4 Development
0 Executive 1 3 Business Analysis
0 Executive 1 5 Testing
0 Executive 1 9 Area 2
1 IT 901763 2 Business Systems
1 IT 901763 7 Mobilisation
1 IT 901763 6 Systems Architecture
1 IT 901763 4 Development
1 IT 901763 3 Business Analysis
1 IT 901763 5 Testing
2 Business Systems 904241 7 Mobilisation
2 Business Systems 904241 6 Systems Architecture
2 Business Systems 904241 4 Development
2 Business Systems 904241 3 Business Analysis
2 Business Systems 904241 5 Testing
8 Operations 900885 9 Area 2
7 Mobilisation 904241
6 Systems Architecture 908012
4 Development 900976
3 Business Analysis 900813
5 Testing 907052
9 Area 2 900456
我可以在客户端的C#中执行此操作,但我真的希望将其作为数据库的视图。
请有人帮我解决这个问题。它甚至可能吗?
如果您需要澄清任何内容,请发表评论,我会尝试提供更多信息。
答案 0 :(得分:3)
此解决方案产生的结果类似于问题规范中的结果。
select
connect_by_root section_id section_id,
connect_by_root section_name section_name,
connect_by_root section_manager section_manager,
section_id subsection_id,
section_name subsection_name
from
section
connect by nocycle
prior section_id = owner_section_id
请求的解决方案在针对样本数据执行时生成28行。
请注意,在示例结果中,Executive
显示为自身的子部分,而IT
,Business Systems
和Operations
(与Executive
相似,还有其他小节)不要。此解决方案会产生另外3行。
此外,请注意Executive
是其自己的所有者。我相信不应该在图表中允许循环,除非他们向我们揭示的邪恶是实现某些所需功能的最合理方式。如果图表中没有此类循环,则应删除查询中的nocycle
关键字。
答案 1 :(得分:1)
是的,有可能。您需要使用Oracle CONNECT BY
语法。 Refer here。很抱歉没有共享SQL,因为我自己无法检查它。