Tsql 修改副本

Tsql 修改副本,tsql,duplicates,sql-update,inner-join,Tsql,Duplicates,Sql Update,Inner Join,我正试图找出做两件事的方法: 在表中查找重复记录 “名称”列中的名称通常重复,但 特别是那些ParentID相同的。如果我 具有相同的名称,其中ParentID不同,因为 名字(或孩子)属于不同的父母 修改这些副本 最好,我会通过在名称后面添加“ID”来修改这些重复项 我提出了一个查询来定位重复项并将其转储到临时表中: CREATE TABLE #Dup( Name varchar(50), CustNo varchar(7)) insert into #Dup (Name, CustNo)

我正试图找出做两件事的方法:

  • 在表中查找重复记录 “名称”列中的名称通常重复,但 特别是那些ParentID相同的。如果我 具有相同的名称,其中ParentID不同,因为 名字(或孩子)属于不同的父母

  • 修改这些副本
  • 最好,我会通过在名称后面添加“ID”来修改这些重复项

    我提出了一个查询来定位重复项并将其转储到临时表中:

    CREATE TABLE #Dup(
    Name varchar(50),
    CustNo varchar(7))
    
    insert into #Dup (Name, CustNo)
    SELECT [Name],[CustNo]
    
    FROM [02Kids]
    GROUP BY [Name], [CustNo]
    HAVING Count(*)>1
    
    这似乎奏效了。当我查看表中的数据时,我看到了名称,我看到了ParentID标识,实际上,这个名称在该父ID中出现了两次。值得注意的是,该名称在表中只出现一次。它不显示具有相同名称和ID的两行(可能这是我的问题的一部分)

    以下是我在尝试执行修改时提出的查询:

    select[#Dup].[Name] + '  ' + [02Kids].[ID] as iName, [02Kids].ParentID 
    from #Dup
    inner join [02Kids]
    on #Dup.CustNo = [02Kids].ParentID 
    order by iName asc
    
    嗯,这类作品,除了我最终得到大量的复制品。例如,我可以确认的一个“名称”只有两个重复项,最终在该select查询中总共接近13个


    我可能有点偏离这个问题(这是我用来自学的练习内容),但我很难想出一个正确的方法来做到这一点。我仍在学习语法、关键字、函数等,所以可能有一些我还不知道的东西我应该使用。

    要在“修改”查询中只获得所需的匹配项,您需要在join子句中添加名称匹配项。现在,您正在将重复记录与该家长的每个孩子进行匹配,而不仅仅是重复记录。因此,如果一个父母有13个孩子,其中只有一个是重复的,你会得到13个额外的记录

    inner join [02Kids]
    on #Dup.CustNo = [02Kids].ParentID AND
    #Dup.Name = [02Kids].Name
    

    这回答了你的问题吗

    USE tempdb
    GO
    
    CREATE TABLE Person (PersonID INT, FName VARCHAR(25), LName VARCHAR(25))
    INSERT INTO Person VALUES
    (1, 'Jim', 'Jones'),
    (2, 'Rob', 'Smith'),
    (3, 'Matt', 'Bridges'),
    (4, 'Jim', 'Jones'),
    (5, 'Jim', 'Jones'),
    (6, 'Alex', 'Door'),
    (7, 'Wilhelm', 'Kay')
    GO
    
    ;WITH DupDetect AS
    (
        SELECT *
                ,Occ = ROW_NUMBER() OVER (PARTITION BY FName, LName ORDER BY PersonID)
        FROM Person
    )
    UPDATE DupDetect
    SET FName = LTRIM(STR(PersonID)) + FName
    WHERE Occ > 1
    
    SELECT *
    FROM Person
    
    导致

    PersonID |  FName   |   LName
    ---------------------------------
    1        |  Jim     |   Jones
    2        |  Rob     |   Smith
    3        |  Matt    |   Bridges
    4        |  4Jim    |   Jones
    5        |  5Jim    |   Jones
    6        |  Alex    |   Door
    7        |  Wilhelm |   Kay
    

    我不知道有任何更干净或更有效的模式可以修改或删除重复项。

    我正在一点一点地进行修改,因此,第一步是找出如何定位重复项,接下来是找出如何修改或删除重复项。这对我来说是一个学习的过程,我没有真正的“道路”。所以,根据我下一步对这些记录的处理决定了我的研究将引导我下一步。但是根据你给我的,我会把它分解并理解其中的部分,这样我希望将来能更容易地应用这些东西。一定要对你选择的方法和我发布的方法进行性能分析。然后你就会明白为什么我写了一篇关于最佳方法的文章却没有被接受,我会如此激动;)这产生了我所期望的结果。非常感谢。