Du måste ha dubblettposter för vissa/alla klagomålsnummer, så använd DISTINCT
kommer inte att fungera. Tänk på en enkel tabell som
Column1 | Column2
-----------+------------
A | X
A | Y
Om du bara vill ha en post för Kolumn1 =A, har SQL inget sätt att veta om du ska lägga X eller Y i Kolumn2. Det här är samma problem som du har men med 19 kolumner, inte 2. Du måste implementera någon form av logik för hur du bestämmer vilken rad som ska visas för varje klagomålsnummer. Så för tabellen ovan om jag ville att X skulle visas i kolumn2 skulle jag använda följande fråga:
SELECT Column1,
Column2
FROM ( SELECT Column1,
Column2,
ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY Column2 ASC) [RowNumber]
FROM MyTable
) t
WHERE RowNumber = 1
Här använder jag ROW_NUMBER()
funktion för att prioritera varje rad och sedan bara visa den med högst prioritet. Om jag inte brydde mig om vilken ordning de kom ut i skulle jag kunna använda något sådant här för att välja en slumpmässig rad.
ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY NEWID()) [RowNumber]
Eftersom jag inte vet vilken logik jag ska tillämpa på din fråga kan jag inte lägga upp exakt det du behöver, men jag kan försöka komma igång:
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 skulle bara behöva pilla runt med ORDER BY
inom ROW_NUMBER
funktion för att passa dina behov.