2013-09-23 15 views

回答

0
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 

五個值的示例:

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 
+0

確定THX但有時我在一個行,有時有更多的價值,有時3 5 –

+0

@JohnRambo您必須根據需要多次重複「爆炸」部分中的「regexp_substr」功能。你可以給更多的以防萬一... –

+0

是的我明白這個例子,但我nedd動態SQL,但有時用戶寫2值meybe 6. 2和6是動態值,我現在不用用戶寫什麼:) –