Musisz mieć zduplikowane rekordy dla niektórych/wszystkich liczb zarzutu, więc korzystanie DISTINCT
nie będzie działać. Rozważmy prostą tabelę takich jak
Column1 | Column2
-----------+------------
A | X
A | Y
Jeśli chcesz tylko jeden rekord COLUMN1 = A, SQL nie ma możliwości dowiedzenia się, czy umieścić X lub Y w Kolumna2. Jest to ten sam problem, który masz, ale z 19 kolumnami, nie 2. Musisz wdrożyć jakąś logikę, jak zdecydować, który wiersz będzie wyświetlany dla każdego numeru skargi. Więc dla powyższej tabeli, jeśli chciałem X, aby pokazać w Kolumna2 chciałbym użyć 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 funkcji ROW_NUMBER()
priorytet każdego wiersza, a następnie tylko wyświetlanie jednego z najwyższym priorytetem. Gdybym nie dbał o to, w jakiej kolejności się pojawią, mógłbym użyć czegoś takiego, by wybrać losowy wiersz.
ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY NEWID()) [RowNumber]
Ponieważ nie wiem, co logika stosuje się do zapytania nie mogę pisać dokładnie to, co trzeba, ale mogę spróbować Ci 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
byłoby Wystarczy pobawić dzięki funkcji ORDER BY
w ramach funkcji ROW_NUMBER
dopasowanej do Twoich potrzeb.
Zastanów się nad przemianowaniem twoich kolumn i tabel/widoków. Spacje w nazwach obiektów są odrażające. – GarethD
Dziękuję .. W 100% działa .. –
GarethD the Genius ... –