Você deve ter registros duplicados para alguns/todos os Números de Reclamação, então usando
DISTINCT
não funciona. Considere uma tabela simples, como Column1 | Column2
-----------+------------
A | X
A | Y
Se você quiser apenas um registro para a Coluna1 =A, o SQL não tem como saber se deve colocar X ou Y na Coluna2. Este é o mesmo problema que você está tendo, mas com 19 colunas, não 2. Você precisa implementar algum tipo de lógica para decidir qual linha será exibida para cada Número de Reclamação. Então, para a tabela acima, se eu quisesse que X fosse mostrado na Coluna2, eu usaria a seguinte 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
Aqui estou usando o
ROW_NUMBER()
função para priorizar cada linha, exibindo apenas aquela com a prioridade mais alta. Se eu não me importasse com a ordem em que eles saíssem, eu poderia usar algo assim para escolher uma linha aleatória. ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY NEWID()) [RowNumber]
Como não sei qual lógica aplicar à sua consulta, não posso postar exatamente o que você precisa, mas posso tentar começar:
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
Você só precisaria mexer com o
ORDER BY
dentro do ROW_NUMBER
função para atender às suas necessidades.