简体   繁体   中英

SQL - ORACLE change rows to column

I have some table

1 | 2 | test,test| 4

I need a query to return this table in this format:

1 | 2 | test | 4
1 | 2 | test | 4
with src as
(
        select  '1' col0,  '2' col1, 'test1,test2'   col2 from dual union all
        select '11' col0, '22' col1, 'test11,test22' col2 from dual
)
, explode as
(
        select  col0
        ,       col1
        ,       regexp_substr(col2, '\w+', 1, 1) as col2_1
        ,       regexp_substr(col2, '\w+', 1, 2) as col2_2
        --      if there is more add more...
        from    src
)
select col0, col1, col2_1 from explode where col2_1 is not null union all
select col0, col1, col2_2 from explode where col2_2 is not null 
order by col0, col1, col2_1
;

1   2   test1
1   2   test2
11  22  test11
11  22  test22

An example for five values:

with src as
(
        select  '1'  col0,   '2' col1, 'test1,test2'                        col2 from dual union all
        select '11'  col0,  '22' col1, 'test11,test22'                      col2 from dual union all
        select '111' col0, '222' col1, 'test31,test32,test33,test34,test35' col2 from dual
)
, explode as
(
        select  col0
        ,       col1
        ,       regexp_substr(col2, '\w+', 1, 1) as col2_1
        ,       regexp_substr(col2, '\w+', 1, 2) as col2_2
        ,       regexp_substr(col2, '\w+', 1, 3) as col2_3
        ,       regexp_substr(col2, '\w+', 1, 4) as col2_4
        ,       regexp_substr(col2, '\w+', 1, 5) as col2_5
        --      if there is more add more...
        from    src
)
select col0, col1, col2_1, col2_2, col2_3, col2_4, col2_5 from explode where col2_1 is not null union all
select col0, col1, col2_1, col2_2, col2_3, col2_4, col2_5 from explode where col2_2 is not null union all
select col0, col1, col2_1, col2_2, col2_3, col2_4, col2_5 from explode where col2_3 is not null union all
select col0, col1, col2_1, col2_2, col2_3, col2_4, col2_5 from explode where col2_4 is not null union all
select col0, col1, col2_1, col2_2, col2_3, col2_4, col2_5 from explode where col2_5 is not null
order by col0, col1, col2_1, col2_2, col2_3, col2_4, col2_4, col2_5
;

1   2   test1   test2           
1   2   test1   test2           
11  22  test11  test22          
11  22  test11  test22          
111 222 test31  test32  test33  test34  test35
111 222 test31  test32  test33  test34  test35
111 222 test31  test32  test33  test34  test35
111 222 test31  test32  test33  test34  test35
111 222 test31  test32  test33  test34  test35

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM