Devi avere record duplicati per alcuni/tutti i numeri di reclamo, quindi utilizza DISTINCT
non funzionerà. Considera una tabella semplice come
Column1 | Column2
-----------+------------
A | X
A | Y
Se si desidera un solo record per Column1 =A, SQL non ha modo di sapere se inserire X o Y in Column2. Questo è lo stesso problema che stai riscontrando ma con 19 colonne, non 2. È necessario implementare una sorta di logica su come decidere quale riga verrà visualizzata per ciascun numero di reclamo. Quindi, per la tabella sopra, se volessi che X fosse mostrato in Column2, userei la seguente query:
SELECT Column1,
Column2
FROM ( SELECT Column1,
Column2,
ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY Column2 ASC) [RowNumber]
FROM MyTable
) t
WHERE RowNumber = 1
Qui sto usando il ROW_NUMBER()
funzione per assegnare la priorità a ciascuna riga, quindi visualizzare solo quella con la priorità più alta. Se non mi interessa in quale ordine sono usciti, potrei usare qualcosa di simile per scegliere una riga casuale.
ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY NEWID()) [RowNumber]
Dal momento che non so quale logica applicare alla tua query non posso pubblicare esattamente ciò di cui hai bisogno, ma posso provare a iniziare:
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
Dovresti solo giocherellare con ORDER BY
all'interno del ROW_NUMBER
funzione per soddisfare le tue esigenze.