Mise à jour pour utiliser vos données nouvellement fourni:
Les solutions utilisant les données d'origine se trouvent à la fin de cette réponse.
Utilisation de votre nouvelles données:
DECLARE @T TABLE([contract] INT, project INT, activity INT)
INSERT INTO @T VALUES(1000, 8000, 10)
INSERT INTO @T VALUES(1000, 8000, 20)
INSERT INTO @T VALUES(1000, 8001, 10)
INSERT INTO @T VALUES(2000, 9000, 49)
INSERT INTO @T VALUES(2000, 9001, 49)
INSERT INTO @T VALUES(3000, 9000, 79)
INSERT INTO @T VALUES(3000, 9000, 78)
SELECT DISTINCT [contract], activity FROM @T AS A WHERE
(SELECT COUNT(DISTINCT activity)
FROM @T AS B WHERE B.[contract] = A.[contract]) = 1
retours: 2000, 49
Solutions utilisant des données originales
AVERTISSEMENT: Les solutions suivantes utilisent les données précédemment données dans la question et peut ne pas avoir de sens pour la question actuelle. Je les ai laissés attachés pour l'exhaustivité seulement.
SELECT Col1, Count(col1) AS count FROM table
GROUP BY col1
HAVING count > 1
Cela devrait vous permettre d'obtenir une liste de toutes les valeurs de col1 qui ne sont pas distinctes. Vous pouvez placer ceci dans une table var ou une table temporaire et vous joindre à elle.
Voici un exemple en utilisant un sous-requête:
DECLARE @t TABLE(col1 VARCHAR(1), col2 VARCHAR(1), col3 VARCHAR(1))
INSERT INTO @t VALUES('A', 'B', 'C');
INSERT INTO @t VALUES('D', 'E', 'F');
INSERT INTO @t VALUES('A', 'J', 'K');
INSERT INTO @t VALUES('G', 'H', 'H');
SELECT * FROM @t
SELECT col1, col2 FROM @t WHERE col1 NOT IN
(SELECT col1 FROM @t AS t GROUP BY col1 HAVING COUNT(col1) > 1)
Ce retour:
D E
G H
Et une autre méthode que les utilisateurs d'une table temporaire et rejoindre:
DECLARE @t TABLE(col1 VARCHAR(1), col2 VARCHAR(1), col3 VARCHAR(1))
INSERT INTO @t VALUES('A', 'B', 'C');
INSERT INTO @t VALUES('D', 'E', 'F');
INSERT INTO @t VALUES('A', 'J', 'K');
INSERT INTO @t VALUES('G', 'H', 'H');
SELECT * FROM @t
DROP TABLE #temp_table
SELECT col1 INTO #temp_table
FROM @t AS t GROUP BY col1 HAVING COUNT(col1) = 1
SELECT t.col1, t.col2 FROM @t AS t
INNER JOIN #temp_table AS tt ON t.col1 = tt.col1
également retours:
D E
G H
Quel est le PK pour cette table? –