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

  • 相关阅读:
    Node.js:事件循环
    Node.js:回调函数
    Node.js:REPL(交互式解释器)
    Node.js:NPM 使用介绍
    Node.js:创建第一个应用
    Node.js:安装配置
    Node.js:教程
    Node.js:目录
    Node.js:template
    虚拟化之xenserver
  • 原文地址:https://www.cnblogs.com/Ellfelo/p/CTEandRank.html
Copyright © 2011-2022 走看看