Oracle中的列转行例子详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle中的列转行例子详解相关的知识,希望对你有一定的参考价值。
数据如下:
name id
张三 1,2,3
要求实现:
name id
张三 1
张三 2
张三 3
--创建临时表 create table tmp as(select ‘张三‘ name, ‘1,2,3‘ id from dual); --写法1 select name,regexp_substr(id,‘[^,]+‘,1,level) as id from tmp connect by level <= regexp_count(id,‘,‘)+1 order by id --写法2: select name,trim(regexp_substr(id,‘[^,]+‘,1,level)) as id from tmp connect by name = prior name and prior dbms_random.value is not null and level <= length(regexp_replace(id, ‘[^,]‘))+1; --写法3 select name, --regexp_replace(id,‘(\w+)\,(\w+)\,(\w+)‘,level) id regexp_replace(id,‘(\w+)\,(\w+)\,(\w+)‘,‘\‘||to_char(level)) id from tmp connect by level <= regexp_count(id,‘,‘)+1; --写法4: select name, substr(‘,‘||id||‘,‘,instr(‘,‘||id||‘,‘, ‘,‘, 1, level) + 1, instr(‘,‘||id||‘,‘, ‘,‘, 1, level + 1) -( instr(‘,‘||id||‘,‘, ‘,‘, 1, level) + 1)) from tmp connect by level <= regexp_count(id,‘,‘)+1 order by level
此外,列转行还可以使用union all和unpivot(oracle 11g新特性)等,待后续补充
以上是关于Oracle中的列转行例子详解的主要内容,如果未能解决你的问题,请参考以下文章