求助人员组织架构sql该怎么写

[复制链接]
查看11 | 回复4 | 2011-2-18 11:42:48 | 显示全部楼层 |阅读模式
组织表 t1 字段有name,p_name
name和p_name的关系是子父关系
举个例子数据如下

select * from t1
name
p_name
数据库管理组 运维组
运维组
信息部
信息部
职能部
职能部
总裁办
总裁办

网络组
运维组
最后想得出的是 把数据库管理组的所在上层级别都显示出来 ,显示在同一条数据中
如下显示结果,这个该如何用sql显示出来

总裁办职能部信息部运维组数据库管理组


回复

使用道具 举报

千问 | 2011-2-18 11:42:48 | 显示全部楼层


Try!
select cast(listagg(name, ',') within group (order by level desc) over() as varchar2(20)) str
from t
start with name = '数据库管理组'
connect by prior p_name = name


回复

使用道具 举报

千问 | 2011-2-18 11:42:48 | 显示全部楼层
bell6248 发表于 2016-12-15 16:31
Try!
select cast(listagg(name, ',') within group (order by level desc) over() as varchar ...

第一次见到把listagg和connect by一起用
回复

使用道具 举报

千问 | 2011-2-18 11:42:48 | 显示全部楼层
我感觉应该用SYS_CONNECT_BY_PATH, 同一层的又不需要弄进去。
回复

使用道具 举报

千问 | 2011-2-18 11:42:48 | 显示全部楼层
with t as
(select '数据库管理组' name, '运维组' pname from dual
union all
select '运维组' name, '信息部' pname from dual
union all
select '信息部' name, '职能部' pname from dual
union all
select '职能部' name, '总裁办' pname from dual
union all
select '总裁办' name, '' pname from dual
union all
select '网络组' name, '运维组' pname from dual)
select listagg(t.name, ',') within group(order by level desc) as name
from t
start with t.name = '数据库管理组'
connect by prior t.pname = t.name
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行