Du skal have duplikerede poster for nogle/alle klagenumre, så brug DISTINCT
vil ikke virke. Overvej en simpel tabel såsom
Column1 | Column2
-----------+------------
A | X
A | Y
Hvis du kun vil have én post for Kolonne1 =A, har SQL ingen mulighed for at vide, om du skal sætte X eller Y i Kolonne2. Dette er det samme problem, som du har, men med 19 kolonner, ikke 2. Du skal implementere en form for logik for, hvordan du beslutter, hvilken række der skal vises for hvert klagenummer. Så til ovenstående tabel, hvis jeg ønskede, at X skulle vises i kolonne 2, ville jeg bruge følgende forespørgsel:
SELECT Column1,
Column2
FROM ( SELECT Column1,
Column2,
ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY Column2 ASC) [RowNumber]
FROM MyTable
) t
WHERE RowNumber = 1
Her bruger jeg ROW_NUMBER()
funktion til at prioritere hver række og derefter kun vise den med højeste prioritet. Hvis jeg var ligeglad med, hvilken rækkefølge de kom ud i, kunne jeg bruge sådan noget til at vælge en tilfældig række.
ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY NEWID()) [RowNumber]
Da jeg ikke ved, hvilken logik jeg skal anvende på din forespørgsel, kan jeg ikke skrive præcis det, du har brug for, men jeg kan prøve at få dig i gang:
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
Du skal bare rode rundt med ORDER BY
inden for ROW_NUMBER
funktion, der passer til dine behov.