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
3 Réponses :
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
Vous semblez avoir des doublons complets, alors utilisez simplement Si vous n'avez pas de doublons complets et que vous souhaitez conserver les valeurs d'origine, Je recommande :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);
union all : select a, b
from t
where a < b;
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.
Quels rdbms utilisez-vous?
Dans Postgres et Oracle, vous pouvez utiliser
sélectionner le moins distinct (a, b), le plus grand (a, b)