Estoy trabajando con una tabla que es un extracto de un conjunto de otras tablas. Todas las filas de la tabla de extracción deben ser únicas según las claves D1, D2 y D3. Ellos no son. Parece que un desarrollador anterior intentó resolver este problema utilizando un SELECT DISTINCT
en todas las columnas consultadas desde esta tabla. Esto funcionará, pero solo si cada fila que es un duplicado en (D1, D2, D3) también es un duplicado en las columnas sin clave (ignorando la columna de IDENTIDAD que se agregó a la tabla de extracción).Cómo encontrar filas que son duplicados por una clave pero no duplicados en todas las columnas?
En otras palabras, las filas de la forma siguiente:
D1 D2 D3 C4 C5 C6
=== === === === === ===
A B C X1 X2 X3
A B C X1 X2 X3
continuación
SELECT DISTINCT D1, D2, D3, C4, C5, C6
FROM BAD_TABLE
"funcionará", ya que no hay diferencia entre las filas, que están duplicados en (D1, D2, D3) Pero si la tabla contiene
D1 D2 D3 C4 C5 C6
=== === === === === ===
A B C X1 X2 X3
A B C X1 X2 X4
luego SELECT DISTINCT devolvería dos filas para la llave (A, B, C). Además, tendríamos que decidir cuál de X3 o X4 era el valor "correcto".
Sé cómo encontrar los duplicados en (D1, D2, D3). Incluso sé cómo encontrar los duplicados en todas las columnas (excepto la columna de identidad):
;
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
La pregunta es, ¿cómo puedo encontrar el subconjunto del conjunto de resultados por encima del cual están duplicados en (D1, D2, D3), pero no duplicados en (D1, D2, D3, C4, C5, C6)?
¿Puedes dar una versión TL; DR? – WhatIsOpenID
@WhatIs: podría si supiera lo que significa "TL: DR" :-) –
¿Qué pasa con la votación negativa de la pregunta? ¿Cómo puedo mejorar la pregunta si no dice cuál es el problema? –