Como encontrar linhas que são duplicadas por uma chave, mas não duplicadas em todas as colunas?

Estou trabalhando com uma tabela que é um extrato de um conjunto de outras tabelas. Todas as linhas da tabela de extração devem ser exclusivas de acordo com as teclas D1, D2 e D3. Eles não são. Parece que um desenvolvedor anterior tentou resolver esse problema usando umSELECT DISTINCT em todas as colunas que estão sendo consultadas nesta tabela. Isso funcionará, mas apenas se todas as linhas duplicadas (D1, D2, D3) também forem duplicadas nas colunas sem chave (ignorando a coluna IDENTITY que foi adicionada à tabela de extração).

Em outras palavras, determinadas linhas da seguinte maneira:

D1  D2  D3  C4  C5  C6
=== === === === === ===
A   B   C   X1  X2  X3
A   B   C   X1  X2  X3

então

SELECT DISTINCT D1, D2, D3, C4, C5, C6
FROM BAD_TABLE

funcionará, pois não há diferença entre as linhas duplicadas (D1, D2, D3). Mas se a tabela continha

D1  D2  D3  C4  C5  C6
=== === === === === ===
A   B   C   X1  X2  X3
A   B   C   X1  X2  X4

então SELECT DISTINCT retornaria duas linhas para a chave (A, B, C). Além disso, teríamos que decidir qual dos X3 ou X4 era o valor "correto".

Eu sei como encontrar as duplicatas em (D1, D2, D3). Eu até sei como encontrar as duplicatas em todas as colunas (exceto a coluna IDENTITY):

;
WITH DUPLICATES(D1,D2,D3) AS
(
    SELECT D1, D2, D3
    FROM SOURCE
    GROUP BY D1, D2, D3
    HAVING COUNT(*)>1
)
SELECT S.D1, S.D2, S.D3, S.C4, S.C5, S.C6
FROM SOURCE S
INNER JOIN DUPLICATES D
    ON S.D1 = D.D1 AND S.D2 = D.D2 AND S.D3 = D.D3
ORDER BY S.D1, S.D2, S.D3, S.C4, S.C5, S.C6

A questão é: como encontro o subconjunto do conjunto de resultados acima duplicado em (D1, D2, D3), masnão duplicatas em (D1, D2, D3, C4, C5, C6)?

questionAnswers(5)

yourAnswerToTheQuestion