Vous devez avoir des enregistrements en double pour certains/tous les numéros de plainte, utilisez donc DISTINCT
ne fonctionnera pas. Prenons un tableau simple tel que
Column1 | Column2
-----------+------------
A | X
A | Y
Si vous voulez un seul enregistrement pour Column1 =A, SQL n'a aucun moyen de savoir s'il faut mettre X ou Y dans Column2. C'est le même problème que vous rencontrez mais avec 19 colonnes, pas 2. Vous devez implémenter une sorte de logique pour décider quelle ligne s'affichera pour chaque numéro de plainte. Donc, pour le tableau ci-dessus, si je voulais que X s'affiche dans Column2, j'utiliserais la requête suivante :
SELECT Column1,
Column2
FROM ( SELECT Column1,
Column2,
ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY Column2 ASC) [RowNumber]
FROM MyTable
) t
WHERE RowNumber = 1
Ici, j'utilise le ROW_NUMBER()
pour hiérarchiser chaque ligne, puis n'afficher que celle qui a la priorité la plus élevée. Si je ne me souciais pas de l'ordre dans lequel ils sortaient, je pourrais utiliser quelque chose comme ça pour choisir une ligne au hasard.
ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY NEWID()) [RowNumber]
Comme je ne sais pas quelle logique appliquer à votre requête, je ne peux pas publier exactement ce dont vous avez besoin, mais je peux essayer de vous aider à démarrer :
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
Vous auriez juste besoin de jouer avec le ORDER BY
dans les ROW_NUMBER
fonction pour répondre à vos besoins.