sql – 从视图中删除重复的记录

前端之家收集整理的这篇文章主要介绍了sql – 从视图中删除重复的记录前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有看法如何仅显示不同的记录.有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,以满足您的需求.

猜你在找的MsSQL相关文章