• SQLServer删除重复数据保留一条


    ·

    SQLServer删除重复数据保留一条

    假设SQLServer数据库中的表(table)名是#tb,表中至少有三列 ID、Name 、EnName等。

    创建测试数据:

    --创建测试表 #tb
    if not object_id('Tempdb..#tb') is null
        drop table #tb
    Go
    
    Create table tb([ID] int, [Name] nvarchar(50), [EnName] nvarchar(50))
    Insert #tb
    select 1,N'NameA',N'EnNameA1' union all
    select 2,N'NameA',N'EnNameA2' union all
    select 3,N'NameA',N'EnNameA1' union all
    select 4,N'NameB',N'EnNameB1' union all
    select 5,N'NameB',N'EnNameB2'
    Go

    方法一、

    1、查询出重复的数据,Id只保留其中一个

    SELECT MIN(ID) ID,Name FROM dbo.#tb 
    GROUP BY Name
    HAVING COUNT(1) >  1

    2、然后使用删除时Join上面的表

    DELETE T FROM dbo.#tb T 
    JOIN (
        SELECT MIN(ID) ID,Name FROM dbo.#tb
        GROUP BY Name
        HAVING COUNT(1) >  1
    ) TMP ON T.Name = TMP.Name AND T.Id <> TMP.Id

    --Name相同ID不同,保留ID最小的一条记录

    delete from #tb T where ID not in (select min(ID) from #tb where Name=a.Name)

    方法二、

    1.查询单列重复:

    select * from dbo.#tb
    where name in (select name from #tb group by name having count(name) > 1)

    2.查询多列重复

    SELECT T.* FROM  dbo.#tb T,(SELECT Name,EnName FROM #tb GROUP BY Name,EnName HAVING COUNT(1)>1) AS b
    WHERE T.name=b.name AND T.code=b.code

                    

    ···········

    高级功能请参考(保留最大ID或最小ID):https://www.cnblogs.com/05-hust/articles/14653134.html

    人生只若初见................
  • 相关阅读:
    asp.net 正则表达式
    字符串分隔
    用定时器实现逐渐放大层的功能
    js获取剪贴板内容
    使用无线网卡共享上网
    使用事件探查器跟踪sqlserver进程
    document.all.WebBrowser.ExecWB
    (转)JAVA与.NET DES加密解密
    web打印的实现
    关于div的定位
  • 原文地址:https://www.cnblogs.com/05-hust/p/14980638.html
Copyright © 2020-2023  润新知