Aktualizacja do korzystania z nowo dostarczone dane:
Rozwiązania wykorzystujące oryginalne dane można znaleźć na końcu tej odpowiedzi.
Korzystanie z nowych danych:
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
Powroty: 2000, 49
Rozwiązania z użyciem oryginalnych danych
UWAGA: następujące rozwiązania wykorzystują dane uprzednio podane w pytanie i może nie mieć sensu dla obecnego pytania. Pozostawiłem je załączone tylko dla kompletności.
SELECT Col1, Count(col1) AS count FROM table
GROUP BY col1
HAVING count > 1
To powinno Ci wyświetlić listę wszystkich wartości w col1, które nie są odrębne. Możesz umieścić to w tabeli var lub temp table i dołączyć do niego.
Oto przykład z użyciem sub-zapytanie:
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)
Powrócisz:
D E
G H
a inny sposób, że użytkownicy tabeli temp i dołączenia:
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
też zwraca:
D E
G H
Co to jest PK dla tego stołu? –