直接上题目:
注释:其中 name是人员名称 id 是地点编号,
因为 a 即在1 地点 又在2 地点 还在 5 地点 ,因此 1 2 5地点的所有人需要合并成一个集合,因为b即在 1 地点 又在 3 地点, 所以3地点的人员也要和前面3个地点人员合并 ,最终 1 2 3 5 人员是一个集合
同理,因为 i在 7 又在 4 所以 4 和 7 是一个集合
最后,z 只在 6 地点有,因此 6地点只有一个元素 z
最终结果是这样的:
其中过程大概就是这样
代码如下:
with ts as
(select 'a' as p_name, 1 as p_id
from dual
union all
select 'b', 1
from dual
union all
select 'c', 1
from dual
union all
select 'a', 2
from dual
union all
select 'd', 2
from dual
union all
select 'e', 2
from dual
union all
select 'b', 3
from dual
union all
select 'f', 3
from dual
union all
select 'k', 4
from dual
union all
select 'i', 7
from dual
union all
select 'i', 4
from dual
union all
select 'j', 4
from dual
union all
select 'a', 5
from dual
union all
select 'p', 5
from dual
union all
select 'q', 5
from dual
union all
select 'z', 6 from dual
),
ts1 as --将有关系的人的名称进行一一对应 ,并规定小的为父 大的为子,形成单向树状结构
(select distinct least(t1.p_name, t2.p_name) as fu,
greatest(t1.p_name, t2.p_name) as zi
from ts t1
inner join ts t2
on t1.p_id = t2.p_id
and t1.p_name <> t2.p_name),
ts2(zi,
max_fu) as --将所有顶级父节点按照树状结构进行单向搜索
(select zi, fu as max_fu --将顶级父节点记录下来 方便后面分组
from ts1
where fu in (select fu --此条件可筛选出此方向的顶级父节点 但不包含单个节点
from ts1
minus
select zi from ts1)
union all
select t1.zi, t2.max_fu from ts1 t1 inner join ts2 t2 on t1.fu = t2.zi),
ts3 as --将所有与顶级父节点有关的所有子节点 和 父节点 本身 以及 单个节点 进行合并
(select max_fu, zi
from ts2
union
select distinct p_name, p_name
from ts
where p_name not in (select zi from ts1)) --此条件可筛选出所有的顶级父节点和单个节点
select listagg(zi, ',') within group(order by zi) as flag ---将所有子节点 和父节点 按照顶级父节点分组 并且合并成一行
from ts3
group by max_fu
复制
感觉还不错的话,点下在看鼓励一下作者吧
没有关注的也可以关注下公众号~再次感谢
最后修改时间:2021-04-19 17:16:39
文章转载自SQL大数据开发,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【专家有话说第五期】在不同年龄段,DBA应该怎样规划自己的职业发展?
墨天轮编辑部
1328次阅读
2025-03-13 11:40:53
2月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
470次阅读
2025-03-13 14:38:19
AI的优化能力,取决于你问问题的能力!
潇湘秦
444次阅读
2025-03-11 11:18:22
优炫数据库成功应用于国家电投集团青海海南州新能源电厂!
优炫软件
346次阅读
2025-03-21 10:34:08
国产化+性能王炸!这套国产方案让 3.5T 数据 5 小时“无感搬家”
YMatrix
288次阅读
2025-03-13 09:51:26
GoldenDB数据库社区正式上线!期待与您共享新知
GoldenDB分布式数据库
242次阅读
2025-03-12 14:06:39
一键装库脚本3分钟极速部署,传统耗时砍掉95%!
IT邦德
242次阅读
2025-03-10 07:58:44
征文大赛 |「码」上数据库—— KWDB 2025 创作者计划启动
KaiwuDB
241次阅读
2025-04-01 20:42:12
Navicat 17.2 正式发布 | AI 助手、支持 Snowflake...超多新功能等你解锁
Navicat
209次阅读
2025-03-14 14:13:33
套壳论
梧桐
201次阅读
2025-03-09 10:58:17