Wenn Ihr Eingabedaten sind mehr als eine Zeichenfolge, ich nehme an, dass es eine Art von ID-Spalte gibt, die Sie verwenden können, um die Zeichenfolgen voneinander zu unterscheiden. Wenn keine solche Spalte vorhanden ist, kann sie in der ersten faktorisierten Unterabfrage erstellt werden, z. B. mit rownum
.
with
inputs (id, str) as (
select 1, 'C,2,1,2,3,1' from dual union all
select 2, 'A,ZZ,3,A,3,ZZ' from dual
),
unwrapped (id, str, lvl, token) as (
select id, str, level, regexp_substr(str, '[^,]+', 1, level)
from inputs
connect by level <= 1 + regexp_count(str, ',')
and prior id = id
and prior sys_guid() is not null
),
with_rn (id, str, lvl, token, rn) as (
select id, str, lvl, token, row_number() over (partition by id, token order by lvl)
from unwrapped
)
select id, str, listagg(token, ',') within group (order by lvl) as new_str
from with_rn
where rn = 1
group by id, str
order by id
;
ID STR NEW_STR
---- ------------------ --------------------
1 C,2,1,2,3,1 C,2,1,3
2 A,ZZ,3,A,3,ZZ A,ZZ,3
I Ich bin mir nicht sicher, ob ein normaler Ausdruck der richtige Weg ist. Was hast du probiert? Und welche Sprache benutzt du? (Sie erwähnen Oracle. Bedeutet dies, dass Sie versuchen, dies in SQL zu tun?) – dave
ja, in SQL Select-Anweisung – JanithOCoder
Ich vermute, das ist sehr schwierig in SQL. Es wäre viel einfacher, diese Spalte abzurufen und nachzubearbeiten. Wenn Sie uns mehr Informationen zeigen und was Sie versucht haben, kann dies helfen (und die Downvotes stoppen). – dave