Трябва да имате дублиращи се записи за някои/всички номера на жалби, така че използвайте DISTINCT
няма да работи. Помислете за проста таблица като
Column1 | Column2
-----------+------------
A | X
A | Y
Ако искате само един запис за Колона1 =A, SQL няма как да разбере дали да постави X или Y в Колона2. Това е същият проблем, който имате, но с 19 колони, а не 2. Трябва да приложите някаква логика за това как да решите кой ред ще се показва за всеки номер на жалба. Така че за горната таблица, ако исках X да се показва в колона2, бих използвал следната заявка:
SELECT Column1,
Column2
FROM ( SELECT Column1,
Column2,
ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY Column2 ASC) [RowNumber]
FROM MyTable
) t
WHERE RowNumber = 1
Тук използвам ROW_NUMBER()
функция за приоритизиране на всеки ред, след което показва само този с най-висок приоритет. Ако не ме интересуваше в какъв ред излизат, можех да използвам нещо подобно, за да избера произволен ред.
ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY NEWID()) [RowNumber]
Тъй като не знам каква логика да приложа към вашето запитване, не мога да публикувам точно това, от което се нуждаете, но мога да се опитам да ви помогна да започнете:
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
Просто ще трябва да си поиграете с ORDER BY
в рамките на ROW_NUMBER
функция, за да отговаря на вашите нужди.