--给你看个类似的例子 WITH tb AS( select '张三' name, '工人' ms,1 flag from dual union all select '张三', '北京', 2 from dual union all select '李四', '党员', 1 from dual union all select '李四', '天津', 2 from dual union all select '李四', '塘沽', 3 from dual) select name,replace(substr(max(sys_connect_by_path(ms,';')),2),';','') newms from (select name,ms,rn,lead(rn) over(partition by name order by rn) rn1 from (select name,ms,row_number() over(order by flag desc) rn --flag排序字段 from tb) ) start with rn1 is null connect by rn1=prior rn group by name
--给你看个类似的例子
WITH tb AS(
select '张三' name, '工人' ms,1 flag from dual union all
select '张三', '北京', 2 from dual union all
select '李四', '党员', 1 from dual union all
select '李四', '天津', 2 from dual union all
select '李四', '塘沽', 3 from dual)
select name,replace(substr(max(sys_connect_by_path(ms,';')),2),';','') newms
from (select name,ms,rn,lead(rn) over(partition by name order by rn) rn1
from (select name,ms,row_number() over(order by flag desc) rn --flag排序字段
from tb)
)
start with rn1 is null
connect by rn1=prior rn
group by name
我就是告诉你 可以先把你要的数据取到 然后再sys_connect_path