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

  • 相关阅读:
    Documents
    gitlab 安装和配置
    git相关知识
    马俊龙ansible教程分享
    源码安装python 报错,openssl: error while loading shared libraries: libssl.so.1.1
    jumpserver 常见错误解决
    nginx 定义:响应头和请求头
    gcc入门(下)
    gcc入门(上)
    awk命令
  • 原文地址:https://www.cnblogs.com/Ellfelo/p/CTEandRank.html
Copyright © 2011-2022 走看看