在Oracle PL / SQL中将行转换为列

时间:2014-12-24 06:25:21

标签: oracle plsql oracle-sqldeveloper

有人可以帮我解决问题吗?

我有一个专栏" x"在表格"测试"

X只有一行数据= 1,2,3,4,5,7,9,11就像这样。

我想将行转换为列,分隔符将是","。

我有2列a,b

数据

a b

1 2

3 4

5 6

7 8

9 10

我希望结果是1-2,3-4,5-6,7-8,9-10(意味着形成库存行)

我能实现这个目标吗?

2 个答案:

答案 0 :(得分:2)

您可以尝试以下

select distinct regexp_substr(x,'[^,]+',1,level) from table
connect by level <=regexp_count(x,',')+1;

答案 1 :(得分:1)

由于您的问题尚不清楚是否要拆分列或连接它,所以我在这里为您提供两种解决方案: -

用于在具有分隔符的oracle中拆分字符串&#39;,&#39;使用以下查询: -

select DISTINCT to_number(regexp_substr(X,'[^,]+',1,level)) numbers 
from your_table
connect by to_number(regexp_substr(X,'[^,]+',1,level)) is not null
order by 1;

用于连接具有多行的oracle中的列的值     与分隔符&#39;,&#39;使用以下查询: -

select wm_concat(X) as column_x from your_table ;

以下是您的问题的完整演示代码,解决方案查询将提供所需的结果......

create table dumdd   
(seq_id number,value varchar2(50))

insert all 
into dumdd values(1,'1,2,3,4,5,7,9,11')
into dumdd values(2,'1,2,3,4,5,7,9,11')
into dumdd values(3,'1,2,3,4,5,7,9,11')
select * from dual;

commit;

select seq_id,numbers from 
(
   select distinct seq_id,to_number(regexp_substr(value,'[^,]+',1,level)) numbers 
   from dumdd
connect by to_number(regexp_substr(value,'[^,]+',1,level)) is not null
)
where seq_id=1
order by 1,2;