sql - 生成分层路径

标签 sql oracle parent-child maximo hierarchical-query

我有一个类结构表:

create table classstructure (classstructureid number(8,0), classificationid varchar2(25), parent number(8,0));

insert into classstructure(classstructureid, classificationid, parent) values(1001, 'FLEET', null);
insert into classstructure(classstructureid, classificationid, parent) values(1002, 'LIGHTDUTYVEHICLE', 1001);
insert into classstructure(classstructureid, classificationid, parent) values(1004, 'MEDIUMDUTYVEHICLE', 1001);
insert into classstructure(classstructureid, classificationid, parent) values(1022, 'ACTIVETRANSPORTATION', null);
insert into classstructure(classstructureid, classificationid, parent) values(1023, 'FACILITYWALKWAY', 1022);
insert into classstructure(classstructureid, classificationid, parent) values(1024, 'TRAIL', 1022);
insert into classstructure(classstructureid, classificationid, parent) values(1085, 'SIDEWALK', 1022);
insert into classstructure(classstructureid, classificationid, parent) values(1091, 'SDWRAMP', 1085);
commit;

select * from classstructure;

CLASSSTRUCTUREID CLASSIFICATIONID              PARENT
---------------- ------------------------- ----------
            1001 FLEET                               
            1002 LIGHTDUTYVEHICLE                1001
            1004 MEDIUMDUTYVEHICLE               1001

            1022 ACTIVETRANSPORTATION                
            1023 FACILITYWALKWAY                 1022
            1024 TRAIL                           1022
            1085 SIDEWALK                        1022
            1091 SDWRAMP                         1085

我想将记录折叠到层次结构路径:

HIERARCHYPATH
---------------------------
FLEET \ LIGHTDUTYVEHICLE
FLEET \ MEDIUMDUTYVEHICLE 

ACTIVETRANSPORTATION \ FACILITYWALKWAY
ACTIVETRANSPORTATION \ TRAIL
ACTIVETRANSPORTATION \ SIDEWALK
ACTIVETRANSPORTATION \ SIDEWALK \ SDWRAMP

我该怎么做?

最佳答案

您可以使用sys_connect_by_path()(自Oracle 10g Release 2)函数:

select ltrim(sys_connect_by_path(classificationid, ' \ '),' \ ') as hierarchypath
  from classstructure c
 where parent is not null
 start with parent is null
connect by prior classstructureid = parent;

HIERARCHYPATH
--------------------------------------
FLEET \ LIGHTDUTYVEHICLE
FLEET \ MEDIUMDUTYVEHICLE
ACTIVETRANSPORTATION \ FACILITYWALKWAY
ACTIVETRANSPORTATION \ TRAIL
ACTIVETRANSPORTATION \ SIDEWALK
ACTIVETRANSPORTATION \ SIDEWALK \ SDWRAMP

关于sql - 生成分层路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58035624/

相关文章:

java - 使用SQL存储过程我们可以得到以下输出吗?或者在代码本身中处理它?

c# - LINQ to Entity Any() 及相关对象集合

java - 如何(动态)确定最佳数据库连接数?

c++ - 在父类的Update方法中添加东西

c - 如何检查哪个进程正在运行?

mysql - SQL 左连接外键两个表

php - PDO::PARAM_FLOAT 不存在,为什么?

java.lang.ArrayIndexOutOfBoundsException : for jdbc connection

Oracle - 在过程中选择和删除

jquery - 环绕每个父文本的跨度