J'ai donc une table avec trois colonnes – col1
, col2
et col3
. J'ai besoin de sélectionner les valeurs de col1
qui partagent des lignes avec une seule combinaison de col2
et col3
. Dans le monde idéal, j'écrirais ceci:
SELECT col1 FROM table GROUP BY col1 HAVING COUNT(DISTINCT(col2, col3)) = 1
Comment faire cela dans le monde réel?
Jusqu'à présent, j'ai deux solutions – grouper par col1
et col2
et par col1
et col3
ils joignent les résultats; ou groupe par tous les trois, puis le grouper par col1
. Malheureusement, je reçois (très) différents counts.
La database est sur SQL Server 2005.
SELECT col1 FROM table GROUP BY col1 HAVING MAX(col2) = MIN(col2) AND MAX(col3) = MIN(col3)
Plus complexe:
SELECT col1 FROM ( SELECT col1, ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col2, col3) as rn FROM table ) T GROUP BY col1 HAVING MAX(rn) = 1
select * from mycols where col1 in ( select max(col1) from mycols group by col2, col3 having count(col1)=1 )