Debe tener registros duplicados para algunos/todos los números de reclamo, por lo que debe usar DISTINCT
no trabajará. Considere una tabla simple como
Column1 | Column2
-----------+------------
A | X
A | Y
Si desea solo un registro para Column1 =A, SQL no tiene forma de saber si colocar X o Y en Column2. Este es el mismo problema que tiene pero con 19 columnas, no 2. Debe implementar algún tipo de lógica sobre cómo decidir qué fila se mostrará para cada número de queja. Entonces, para la tabla anterior, si quisiera que X se mostrara en la Columna 2, usaría la siguiente consulta:
SELECT Column1,
Column2
FROM ( SELECT Column1,
Column2,
ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY Column2 ASC) [RowNumber]
FROM MyTable
) t
WHERE RowNumber = 1
Aquí estoy usando el ROW_NUMBER()
función para priorizar cada fila, luego solo muestra la que tiene la prioridad más alta. Si no me importara en qué orden salieron, podría usar algo como esto para elegir una fila al azar.
ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY NEWID()) [RowNumber]
Como no sé qué lógica aplicar a su consulta, no puedo publicar exactamente lo que necesita, pero puedo intentar ayudarlo a comenzar:
SELECT [Complaint Number],
[Complaint_For],
[Total_Complaint_Qty],
[Defects],
[Customer Code ],
[Location],
[CutomerName],
[KUNUM],
[QMNUM],
[Responsible_KAM]
FROM ( SELECT [Complaint Number],
[Complaint_For],
[Total_Complaint_Qty],
[Defects],
[Customer Code ],
[Location],
[CutomerName],
[KUNUM],
[QMNUM],
[Responsible_KAM],
ROW_NUMBER() OVER(PARTITION BY [Complaint Number] ORDER BY Complaint_For, Defects) AS RowNumber
FROM [CCCMPREPOSITORY].[dbo].[VW_Final_]
) data
WHERE RowNumber = 1
Solo necesitaría jugar con el ORDER BY
dentro del ROW_NUMBER
función para satisfacer sus necesidades.