Bạn phải có các bản ghi trùng lặp cho một số / tất cả các Số Khiếu nại, vì vậy hãy sử dụng DISTINCT
sẽ không làm việc. Hãy xem xét một bảng đơn giản chẳng hạn như
Column1 | Column2
-----------+------------
A | X
A | Y
Nếu bạn chỉ muốn một bản ghi cho Column1 =A, SQL không có cách nào biết có nên đặt X hay Y vào Column2 hay không. Đây là vấn đề tương tự mà bạn đang gặp phải nhưng với 19 cột, không phải 2. Bạn cần triển khai một số loại logic làm cách nào để quyết định hàng nào sẽ hiển thị cho mỗi Số Khiếu nại. Vì vậy, đối với bảng trên nếu tôi muốn X hiển thị trong Cột 2, tôi sẽ sử dụng truy vấn sau:
SELECT Column1,
Column2
FROM ( SELECT Column1,
Column2,
ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY Column2 ASC) [RowNumber]
FROM MyTable
) t
WHERE RowNumber = 1
Ở đây tôi đang sử dụng ROW_NUMBER()
chức năng ưu tiên từng hàng, sau đó chỉ hiển thị hàng có ưu tiên cao nhất. Nếu tôi không quan tâm thứ tự chúng xuất hiện, tôi có thể sử dụng thứ gì đó như thế này để chọn một hàng ngẫu nhiên.
ROW_NUMBER() OVER(PARTITION BY Column1 ORDER BY NEWID()) [RowNumber]
Vì tôi không biết logic nào để áp dụng cho truy vấn của bạn nên tôi không thể đăng chính xác những gì bạn cần, nhưng tôi có thể thử và giúp bạn bắt đầu:
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
Bạn chỉ cần thao tác với ORDER BY
trong ROW_NUMBER
phù hợp với nhu cầu của bạn.