Musisz mieć zduplikowane rekordy dla niektórych/wszystkich numerów skarg, więc użyj DISTINCT
nie będzie działać. Rozważ prostą tabelę, taką jak
Column1 | Column2
-----------+------------
A | X
A | Y
Jeśli chcesz mieć tylko jeden rekord dla Kolumna1 =A, SQL nie ma możliwości sprawdzenia, czy umieścić X czy Y w Kolumnie2. Jest to ten sam problem, który masz, ale z 19 kolumnami, a nie 2. Musisz zaimplementować jakąś logikę, aby zdecydować, który wiersz będzie wyświetlany dla każdego numeru skargi. Więc dla powyższej tabeli, gdybym chciał, aby X wyświetlał się w kolumnie 2, użyłbym następującego zapytania:
SELECT Column1,
Column2
FROM ( SELECT Column1,
Column2,
ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY Column2 ASC) [RowNumber]
FROM MyTable
) t
WHERE RowNumber = 1
Tutaj używam ROW_NUMBER()
funkcja priorytetyzacji każdego wiersza, a następnie wyświetlanie tylko tego o najwyższym priorytecie. Jeśli nie obchodziło mnie, w jakiej kolejności wychodzą, mogę użyć czegoś takiego, aby wybrać losowy rząd.
ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY NEWID()) [RowNumber]
Ponieważ nie wiem, jaką logikę zastosować do twojego zapytania, nie mogę opublikować dokładnie tego, czego potrzebujesz, ale mogę spróbować i zacząć:
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
Musisz tylko pobawić się z ORDER BY
w ROW_NUMBER
funkcja dopasowana do Twoich potrzeb.