Проблема с вашими данными состоит в том, что есть три столбца, и они могут быть обнуляемыми или иметь разную длину.Таким образом, вы можете сначала выполнить три подзапроса (где важно левое соединение, чтобы не потерять ни одной строки), а затем снова данные о левом соединении.Чтобы разделить строки, я использовал xmltable
способ, вы можете использовать любой другой метод, уже описанный в SO.
-- sample data
with t(title, column_A, column_B, column_c) as (
select 3007576, '1000', '0', '3000' from dual union all
select 3007879, '100, 200,300', null, '400,500' from dual union all
select 3007900, null, '80, 205, 212', '54, 5417' from dual )
-- end of sample data
select *
from (
select title, trim(column_value) ca from t
left join xmltable(('"' || replace(column_a, ',', '","') || '"')) on 1 = 1) a
left join (
select title, trim(column_value) cb from t
left join xmltable(('"' || replace(column_b, ',', '","') || '"')) on 1 = 1) b
using (title)
left join (
select title, trim(column_value) cc from t
left join xmltable(('"' || replace(column_c, ',', '","') || '"')) on 1 = 1) c
using (title)
order by title, ca, cb, cc
Результат для моих данных:
TITLE CA CB CC
-------- ----- ----- -----
3007576 1000 0 3000
3007879 100 400
3007879 100 500
3007879 200 400
3007879 200 500
3007879 300 400
3007879 300 500
3007900 205 54
3007900 205 5417
3007900 212 54
3007900 212 5417
3007900 80 54
3007900 80 5417