加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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,以满足您的需求.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读