Неправильно хранить одни и те же данные в нескольких столбцах.Значения Col_B
и Col_C
уже существуют в Col_A
, вам просто нужно разделить их, а затем применить группирование с помощью функций least
и greatest
, как предложено @ akk0rd87, с учетом предыдущего тега oracle
:
with Table_A(Col_A) as
(
select 'PG_1100000357_1100000356' from dual union all
select 'PG_1100000356_1100000357' from dual union all
select 'PG_10909099_12990909' from dual union all
select 'PG_8989898_79797987' from dual union all
select 'PG_8989898_79797987' from dual
), t as
(
select regexp_substr(Col_A, '[^_]+', 1, 1) col_one,
regexp_substr(Col_A, '[^_]+', 1, 2) col_two,
regexp_substr(Col_A, '[^_]+', 1, 3) col_three
from Table_A
)
select max(concat(concat(col_one||'-',least(col_two,col_three)||'-'),
greatest(col_two,col_three)))
as Col_A,
least(col_two,col_three) as Col_B, greatest(col_two,col_three) as Col_C
from t
group by least(col_two,col_three), greatest(col_two,col_three);
Демо