zoukankan      html  css  js  c++  java
  • 用CTE结合排名函数rank()删除某列值重复的记录

        

    1.认识排名函数
    --不分组,直接对整张表的某列的值进行排名,并产生一个排名值
    SELECT ROW_NUMBER() OVER(ORDER BY a.Name) AS rowNumber,a.Name FROM dbo.ReplyData a

    --PARTITION BY a.NAME,根据Name字段进行分组,再按num进行排名
    SELECT ROW_NUMBER() OVER(PARTITION BY a.Name ORDER BY Num) AS rowNumber,a.Name,a.Num FROM dbo.ReplyData a

    2.创建测试数据

    CREATE TABLE #tempTable(ID INT IDENTITY(1,1) PRIMARY KEY, Num INT)
    INSERT INTO #tempTable( Num )
    SELECT 2
    UNION ALL
    SELECT 2
    UNION ALL
    SELECT 1
    UNION ALL
    SELECT 1
    UNION ALL
    SELECT 2
    UNION ALL
    SELECT 2
    UNION ALL
    SELECT 2
    SELECT * FROM #tempTable

    3进入正题

    --删除num重复的记录

    WITH F(id, ranKN)
    AS
    (
    --根据num分组,这里的分组是不会将记录合并的哈(也就是一个分组一个结果),如果一个组
    --如果这个组出现多个记录,那么rank一定也有多个,也就是大于1.
    SELECT ID, RANK() OVER( PARTITION BY Num ORDER BY ID) AS rowNum FROM #tempTable b
    )
    --SELECT * FROM F,delect 的表#tempTable,不能加别名
    DELETE FROM #tempTable WHERE ID IN(
    SELECT h.ID FROM F g
    JOIN #tempTable h ON g.id = h.ID
    AND g.ranKN >1)

    4检验结果
    SELECT * FROM #tempTable

  • 相关阅读:
    git分支管理之创建与合并分支
    git分支管理
    git远程仓库之从远程库克隆
    git远程仓库之添加远程库
    git远程仓库
    Git时光机穿梭之删除文件
    Git时光机穿梭之撤销修改
    Git时光机穿梭之管理修改
    Git时光机穿梭之工作区和暂存区
    Git时光机穿梭之版本回退
  • 原文地址:https://www.cnblogs.com/Ellfelo/p/CTEandRank.html
Copyright © 2011-2022 走看看