转换前:
![ORACLE 分割字段为多行数据_第1张图片](http://img.e-com-net.com/image/info8/45e06b0e474641258c23e7f43f6d3838.png)
转换后:
![ORACLE 分割字段为多行数据_第2张图片](http://img.e-com-net.com/image/info8/5c36d59cab524823a142132bdbb99a81.png)
转换sql:
with t as
(select '长港路五巷' 地址,'1号' 门牌号,'建苑大厦' 小区,'马武爽' 户主,'121231' 户主身份证号, '张三123 李四3323 王五1212' 人员信息 from dual
union all
select '长港路六巷' 地址,'2号' 门牌号,'长龙苑' 小区, '张大奎' 户主,'12121' 户主身份证号, '马武123 刘贵撒3323 顺丰1212' 人员信息 from dual
)
select 地址,门牌号,小区,人数,'非' 关系,substr(人员信息,0,instr(translate(人员信息,'0123456789','0000000000'),'0')-1) 姓名,
substr(人员信息,instr(translate(人员信息,'0123456789','0000000000'),'0')) 身份证号
from
(select distinct 地址,门牌号,小区,level+1 人数,level,regexp_substr(人员信息,'[^ ]+',1,level) 人员信息
from t
connect BY level<=length(人员信息)-length(replace(人员信息,' ',''))+1
order by 地址,门牌号,小区,level)
union all
select 地址,门牌号,小区,1 人数,'户主' 关系,户主 姓名,户主身份证号 身份证号 from t
order by 地址,门牌号,小区,人数