zoukankan      html  css  js  c++  java
  • 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

    人生只若初见................
  • 相关阅读:
    div居中鼠标悬浮显示下拉列表
    javascript循环
    javascript函数
    javascript时间、随机数
    javascript外部使用
    Javascript 探路
    CSS六大选择器(注释css表里不能加注释!!)
    框架链接
    Jmeter分布式测试dubbo接口2
    Jmeter分布式测试dubbo接口1
  • 原文地址:https://www.cnblogs.com/05-hust/p/14980638.html
Copyright © 2011-2022 走看看