Annahmen:
- wenn eine Zeile wie
E F
nicht über sein "Spiegelbild" in der Tabelle, Die Zeile sollte so wie sie ist in der Ausgabe dargestellt werden. Mit anderen Worten, wenn die letzte Zeile F E
anstelle von E F
war, sollte sie nicht umgedreht werden; nur die Zeile F E
, nicht sein Spiegelbild, sollte in der Ausgabe sein. Diese Anforderung macht das Problem interessanter - ansonsten ist es viel einfacher und eine Lösung wurde bereits bereitgestellt.
col1
und col2
sind nicht nullfähig. Wenn Sie Nullen in den Spalten haben können, müssen Sie die Anforderungen detaillierter angeben, wenn Nullen tatsächlich vorhanden sind.
Abfrage und Ausgabe:
with
input_table (col1, col2) as (
select 'A', 'B' from dual union all
select 'A', 'B' from dual union all
select 'B', 'A' from dual union all
select 'C', 'D' from dual union all
select 'D', 'C' from dual union all
select 'E', 'F' from dual union all
select 'Z', 'H' from dual
),
prep (col1, col2, flag) as (
select a.col1, a.col2, case when b.col1 is null then 0 else 1 end
from input_table a left outer join input_table b
on a.col1 = b.col2 and a.col2 = b.col1
)
select distinct
case when flag = 0 then col1 else least (col1, col2) end as col1,
case when flag = 0 then col2 else greatest(col1, col2) end as col2
from prep
;
COL1 COL2
---- ----
E F
A B
Z H
C D
Können Sie bitte ein wenig mehr im Detail auszuarbeiten, was Sie wirklich wollen? Ich kann es nicht aus deiner Frage herausfinden. – Guenther
Er möchte alle eindeutigen Paare von '' unabhängig von der Spaltenposition. Das heißt, wenn "A B" und "B A" zwei verschiedene Zeilen sind, sollten Sie sie als einen betrachten. @Guenther –
1000111
@Guenther ja ich brauche das gleiche Ergebnis. –