我有看法如何仅显示不同的记录.有19列.我想全部显示在一个没有任何重复,我不想删除重复.我只需要观看目的.
SELECT DISTINCT([Complaint Number]),[Complaint_For],[Total_Complaint_Qty],[Defects],[Customer Code ],[Location],[CutomerName],[KUNUM],[QMNUM],[Responsible_KAM] FROM [CCCMPREPOSITORY].[dbo].[VW_Final_]
如果我使用之前的查询返回1000记录.但是如果我使用以下查询,则返回不重复的精确记录.但是我想要显示所有列.
SELECT DISTINCT([Complaint Number]) FROM [CCCMPREPOSITORY].[dbo].[VW_Final_]
解决方法
您必须拥有一些/所有投诉号码的重复记录,因此使用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],[Responsible_KAM] FROM ( SELECT [Complaint Number],[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
您只需要在ROW_NUMBER功能中绕过ORDER BY,以满足您的需求.