sql – 从视图中删除重复的记录
发布时间:2020-12-12 08:49:28 所属栏目:MsSql教程 来源:网络整理
导读:我有看法如何仅显示不同的记录.有19列.我想全部显示在一个没有任何重复,我不想删除重复.我只需要观看目的. SELECT DISTINCT([Complaint Number]),[Complaint_For],[Total_Complaint_Qty],[Defects],[Customer Code ],[Location],[CutomerName],[KUNUM],[QMNUM
我有看法如何仅显示不同的记录.有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,以满足您的需求. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |