【oracle】数据行 | 一行拆分成两行 | 根据某一列值如(first,second)

1. 输入

2.输出

STEP:

建表语句

create table T_STU(
stuid  varchar2(8),
stuname  varchar2(8), 
stusex varchar2(8)
)

查询语句

select t.*  from  T_STU t; 

转换语句

SELECT stuid,substr(a.stuname, instr(a.stuname, ',', 1, levels.lvl) + 1, instr(a.stuname, ',', 1, levels.lvl + 1) -(instr(a.stuname, ',', 1, levels.lvl) + 1)) as stuname,stusex
FROM 
(SELECT stuid,',' || stuname || ',' AS stuname,stusex,length(stuname) - nvl(length(REPLACE(stuname, ',')), 0) + 1 AS cnt --取待拆分字段每行按照分隔符','分割后的记录数,用于connect by
FROM T_STU) a,
(SELECT rownum AS lvl --产生一个待拆分字段分割后最大记录数的序列
FROM (SELECT MAX(length(stuname || ',') - nvl(length(REPLACE(stuname, ',')), 0)) max_len FROM T_STU)
CONNECT BY LEVEL <= max_len) levels
WHERE levels.lvl <= a.cnt --笛卡尔连接
ORDER BY stuid;

原文链接:

https://blog.csdn.net/u012414590/article/details/71435440

你可能感兴趣的:(Oracle)