0
votes

Comment obtenir des combinaisons uniques

Ceci est un exemple de table et je voulais récupérer des combinaisons uniques. Besoin d'aide avec la requête SQL.

a   z
b   x
c   w
d   s
e   t

Sortie requise:

a   z
b   x
c   w
d   s
e   t
z   a
x   b
w   c
s   d
t   e

sql

2 commentaires

Quels rdbms utilisez-vous?


Dans Postgres et Oracle, vous pouvez utiliser sélectionner le moins distinct (a, b), le plus grand (a, b)


3 Réponses :


1
votes

Il semble que vous souhaitiez sélectionner des paires distinctes. Vous devez d'abord transformer un peu les paires pour que x, y et y, x soient traités comme identiques, puis utiliser la clause DISTINCT:

CREATE TABLE #t (col1 CHAR(1), col2 CHAR(1));
INSERT INTO #t VALUES
('a', 'z'),
('b', 'x'),
('c', 'w'),
('d', 's'),
('e', 't'),
('z', 'a'),
('x', 'b'),
('w', 'c'),
('s', 'd'),
('t', 'e');

SELECT DISTINCT
    CASE WHEN col1 < col2 THEN col1 ELSE col2 END,
    CASE WHEN col1 < col2 THEN col2 ELSE col1 END
FROM #t


0 commentaires

0
votes

Vous semblez avoir des doublons complets, alors utilisez simplement :

select a, b
from t
where a < b
union all
select a, b
from t
where a > b and
      not exists (select 1 from t t2 where t2.a = t.b and t2.b = t.a);

Si vous n'avez pas de doublons complets et que vous souhaitez conserver les valeurs d'origine, Je recommande union all :

select a, b
from t
where a < b;


0 commentaires

0
votes

Ou utilisez une combinaison des tentatives:

select col1, col2 from t where col1 < col2 
union
select col2, col1 from t where col1 >= col2;

Cela fonctionnera si vous n'avez que des doublons ou si certaines combinaisons ne sont qu'une seule fois dans votre tableau.


0 commentaires