您必须有部分/所有投诉编号的重复记录,因此DISTINCT
无法使用。考虑一个简单的表,例如
Column1 | Column2
-----------+------------
A | X
A | Y
如果您只需要 Column1 = A 的一条记录,SQL 无法知道是将 X 还是 Y 放入 Column2。这与您遇到的问题相同,但有 19 列,而不是 2 列。您需要实施某种逻辑来确定每个投诉编号将显示哪一行。因此,对于上表,如果我希望 X 在 Column2 中显示,我将使用以下查询:
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
即可满足您的需求。