代码之家  ›  专栏  ›  技术社区  ›  Todd

SQL Server-删除重复的行并维护现有的主键

  •  2
  • Todd  · 技术社区  · 7 年前

    我有一个表,其中有各种列,需要对其进行重复数据消除,但是我需要为每一行保留现有的主键。显然,当运行select distinct时……如果没有主键列(source_id),则在排除主键列时会给出所需的结果。

    因此,我如何获取不同的行并维护现有的主键数据。

    Source table before de-dupe
    
    Source_ID   Title   First_Name  Last_Name   Organisation
    1000013     Mr      James       Caine       Company1 
    1000014     Ms      Judith      Jason       Company2
    1000015     Mr      James       Caine       Company1 
    
    
    table after de-dupe
    
    Source_ID   Title   First_Name  Last_Name   Organisation
    1000013     Mr      James       Caine       Company1 
    1000014     Ms      Judith      Jason       Company2
    
    3 回复  |  直到 7 年前
        1
  •  2
  •   Hasan Gholamali    7 年前

    使用 ROW_NUMBER() 如下所示:

    SELECT Source_ID, Title, First_Name, Last_Name, Organisation
    FROM
        (SELECT *,ROW_NUMBER() OVER(Partition by Title, First_Name, Last_Name, Organisation Order by Source_ID) as rn
        FROM YourTable) as tblMain
    WHERE rn = 1
    
        2
  •  1
  •   Gordon Linoff    7 年前

    也许你只是想要聚合:

    select max(source_id) as source_id,
           Title, First_Name, Last_Name, Organisation
    from t
    group by Title, First_Name, Last_Name, Organisation;
    
        3
  •  1
  •   Erfan Mohammadi    7 年前

    您可以从此处查找重复值

    ;WITH cte AS 
    (SELECT Source_ID, Title, First_Name, Last_Name, Organisation,
    rn=ROW_NUMBER() OVER(Partition by Title, First_Name, Last_Name, Organisation Order by Source_ID 
    FROM YourTable)
    SELECT * 
    FROM WHERE rn > 1
    

    Detect duplicate items in recursive CTE