• TSQL 筛选删除重复记录并保留一条


    以下为,实现此操作的通用T-sql模版:

    /*delete from a FROM       --删除表a (a 是引用的需要删除的表)
    (
     select ROW_NUMBER() over    -- ROW_NUMBER() over 是一个整体  产生一个从一开始的自增列
     (               
      partition by 重复列1, 重复列2, 重复列3   --,重复列n    partition by 跟group by 大同小异  但是并不是聚合函数 是显示所有的记录,包括重复的             
      order by 重复列1, 重复列2, 重复列3   --,重复列n       order by 跟 ROW_NUMBER() over 连用
     ) RowNumber   --RowNumber 给括号里 ROW_NUMBER 返回结果列 的一个别名
     from 表名) a  --a  结果表的别名
    where a.RowNumber > 1  -- 表a 里的RowNumber的值大于1(记录在一条以上的标识重复)*/

    接下来是实现此操作的一段事例代码:

    CREATE DATABASE Test

    go

    USE Test

    go

    CREATE TABLE #Test (  id UNIQUEIDENTIFIER,  NAME NVARCHAR(20),  pwd NVARCHAR(20) )

    INSERT INTO #Test( id, NAME, pwd )VALUES (NEWID(),'zhangsan','zhangsan')

    INSERT INTO #Test( id, NAME, pwd )VALUES (NEWID(),'zhangsan','zhangsan1')

    INSERT INTO #Test( id, NAME, pwd )VALUES (NEWID(),'zhangsan','zhangsan')

    INSERT INTO #Test( id, NAME, pwd )VALUES (NEWID(),'zhangsan','zhangsan')

    INSERT INTO #Test( id, NAME, pwd )VALUES (NEWID(),'lisi','lisi')

    INSERT INTO #Test( id, NAME, pwd )VALUES (NEWID(),'lisi','lisi')

    INSERT INTO #Test( id, NAME, pwd )VALUES (NEWID(),'lisi','lisi1')

    INSERT INTO #Test( id, NAME, pwd )VALUES (NEWID(),'lisi','lisi')

    INSERT INTO #Test( id, NAME, pwd )VALUES (NEWID(),'lisi','lisi')

    SELECT * FROM #Test

    --查询出排除重复记录,保留一条后的结果,以便加以对比测试

    SELECT * from

        (select ROW_NUMBER() over

                   (

                        partition by  name, pwd

                 order by name, pwd

                   ) RowNumber,* from #Test

          ) a where a.RowNumber > 1

    --执行删除操作(删除重复记录,保留一条)

    delete from a  from

        (select ROW_NUMBER() over

                   (

                        partition by  name, pwd

                order by name, pwd

                  ) RowNumber from #Tes

          ) a where a.RowNumber > 1

  • 相关阅读:
    Spring Web Flow 简介
    LeetCode:按序打印【1114】
    Java基础教程:多线程基础(5)——倒计时器(CountDownLatch)
    React:快速上手(8)——前后端分离的跨域访问与会话保持
    SpringBoot学习笔记:自定义拦截器
    Java进阶教程:垃圾回收
    SpringMVC:学习笔记(12)——ThreadLocal实现会话共享
    Node.js学习笔记(4):Yarn简明教程
    Docker:学习笔记(1)——核心概念及Ubuntu安装
    Java基础教程:内部类
  • 原文地址:https://www.cnblogs.com/Shaina/p/2769800.html
Copyright © 2020-2023  润新知