Debe tener registros duplicados para algunos/todos los Números de queja, por lo que usar DISTINCT
no funcionará. Considere una tabla sencilla como
Column1 | Column2
-----------+------------
A | X
A | Y
Si sólo desea un registro para la columna 1 = A, SQL no tiene manera de saber si poner X o Y en la columna 2. 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 reclamación. Así que para el cuadro anterior si quería X para mostrar en la columna 2 Me gustaría utilizar 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 la función ROW_NUMBER()
dar prioridad a cada fila, entonces sólo mostrar el que tiene la más alta prioridad. Si no me importa el orden en que salieron, podría usar algo así para elegir una fila al azar.
ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY NEWID()) [RowNumber]
Como yo no sé lo que la lógica para aplicar a su consulta no puedo publicar exactamente lo que necesita, pero puedo tratar de empezar:
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
sólo se necesita que violín con la ORDER BY
dentro de la función ROW_NUMBER
para satisfacer sus necesidades.
Como un aparte, considere cambiar el nombre de sus columnas y tablas/vistas. Los espacios en los nombres de los objetos son aborrecibles. – GarethD
Gracias. Es 100% funcional ... –
GarethD the Genius ... –