您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

从视图中删除重复记录

从视图中删除重复记录

您必须对某些/所有投诉号码有重复的记录,因此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 BYROW_NUMBER函数中随意摆弄即可满足您的需求。

其他 2022/1/1 18:47:17 有516人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶