使用CTE,ROW_NUMBER,PARTITION BY来处理数据表重复记录。

先准备下面的数据:

IF OBJECT_ID('tempdb.dbo.#Part') IS NOT NULL DROP TABLE #Part

CREATE TABLE #Part (
[ID] INT,
[Item] NVARCHAR(40),
[Category] NVARCHAR(25),
[Qty] DECIMAL(18,2)
)
GO
INSERT INTO #Part ([ID],[Item],[Category],[Qty]) VALUES (23394,'I32-GG443-QT0098-0001','S',423.65),
(45008,'I38-AA321-WS0098-0506','B',470.87),
(14350,'K38-12321-5456UD-3493','B',200.28),
(64582,'872-RTDE3-Q459PW-2323','T',452.44),
(23545,'098-SSSS1-WS0098-5526','S',500.00),
(80075,'B78-F1H2Y-5456UD-2530','T',115.06),
(53567,'PO0-7G7G7-JJY098-0077','Q',871.33),
(44349,'54F-ART43-6545NN-2514','S',934.39),
(36574,'X3C-SDEWE-3ER808-8764','Q',607.88),
(36574,'RVC-43ASE-H43QWW-9753','U',555.19),
(14350,'K38-12321-5456UD-3493','B',200.28),
(64582,'872-RTDE3-Q459PW-2323','T',452.44),
(80075,'B78-F1H2Y-5456UD-2530','T',115.06),
(53567,'PO0-7G7G7-JJY098-0077','Q',871.33),
(44349,'54F-ART43-6545NN-2514','S',934.39),
(44349,'54F-ART43-6545NN-2514','S',934.39),
(36574,'X3C-SDEWE-3ER808-8764','Q',607.88)
GO

Source Code

处理,并执行把重复行删除。

;WITH Duplicate_Records AS
(
SELECT [ID],
[Item],
[Category],
[Qty],
ROW_NUMBER() OVER (
PARTITION BY [ID],
[Item],
[Category],
[Qty]
ORDER BY [ID]
) AS [row_num]
FROM #Part
)
DELETE FROM Duplicate_Records WHERE [row_num] > 1;

Source Code

接下来,运行下面的SQL,可见得复记录删除,相同的记录仅留下一笔:

删除重复Row记录数据的更多相关文章

  1. ROWID的使用——快速删除重复的记录

    ROWID是数据的详细地址,通过rowid,oracle可以快速的定位某行具体的数据的位置.ROWID可以分为物理rowid和逻辑rowid两种.普通的表中的rowid是物理rowid,索引组织表(I ...

  2. SqlServer中怎么删除重复的记录(表中没有id)

    SqlServer中怎么删除重复的记录(表中没有id) 其实我在别的网址也查到过删除重复的记录,不知道我是我SqlServer2012版本太低还是啥原因 delete from scwhere (c# ...

  3. SQL删除重复的记录(只保留一条)

    首先新建表: --创建示例表 CREATE TABLE t ( id ,) PRIMARY KEY, a ), b ) ) --插入数据 INSERT INTO t SELECT 'aa','bb' ...

  4. Oracle 删除重复的记录,只保留一条

    查询及删除重复记录的SQL语句   1.查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断   select * from 表 where Id in (select Id from 表 g ...

  5. SQL 中如何删除重复(每列数据都重复)的记录,只保留一行?

    如果数据表没有做好约束,那么数据库中难免会遇到数据重复的情况.今天就遇到这么个看起来简单却又费神的问题---如何去重. ------期间感谢微信公众号"有关SQL"的博主大牛提供的 ...

  6. 利用ROW_NUMBER中的partition by 删除重复Key的数据

    With temp As ( Select ROW_NUMBER() over(partition by LogisticsPlan order by createon) rowID,ID from ...

  7. sql删除重复的记录保留一条

    delete from A_TO_NOW where yuan_name in (select   yuan_name from A_TO_NOW group by   yuan_name   hav ...

  8. mysql 数据表中查找、删除重复记录

    为了性能考虑,在阅读之前提醒大家,如果有子查询,子查询查询到的数据最好不要超过总数据量的30%. 查询有重复数据的记录 select * from F group by a,b,c,d having ...

  9. oracle_SQL 实验查询及删除重复记录 依据条件 (row)

    除数据库表中的重复记录 根据条件 ① 创建表准备数据 创建表 tab_test -- Create table create table TAB_TEST ( ID NUMBER, NAME NVAR ...

随机推荐

  1. Hive 实际上对于所存储的文件的完整性以及数据内容是否和表结构一致无支配力

    数据位于hdfs路径下 load data into Table t1 load 执行的是复制文件的操作 create Table partitioned by () 创建了分区目录

  2. 【题解】Jury Compromise(链表+DP)

    [题解]Jury Compromise(链表+DP) 传送门 题目大意 给你\(n\le 200\)个元素,一个元素有两个特征值,\(c_i\)和\(d_i\),\(c,d \in [0,20]\), ...

  3. Django框架ORM单表删除表记录_模型层

    此方法依赖的表是之前创建的过的一张表 参考链接:https://www.cnblogs.com/apollo1616/p/9840354.html 1.删除方法就是delete(),它运行时立即删除对 ...

  4. 谷歌postman插件的安装与使用

    下载地址:http://pan.baidu.com/s/1kTh1g4B 安装方法: 1.下载并解压 2.解压后.打开谷歌浏览器.选择很多其它工具→扩展程序,如图 3.勾选开发人员模式 4.选择载入正 ...

  5. 一起来学linux:ACL

    传统的 权限设置只有user,group,other三种,并没有办法针对某一个用户或者某一个组来设定权限.ACL就是用于这个目的的 那 ACL 主要可以针对哪些方面来控制权限呢?他主要可以针对几个项目 ...

  6. Qt — 子窗体操作父窗体中的方法

    父窗体与子窗体各自的代码如下: 1.  父窗体的代码: void FartherWindow::addactions() { SubWindow subwindow(this); // 把父窗体本身t ...

  7. mysql 创建用户与授权

    权限管理 我们都知道,最高权限管理者是 root 用户 , 它拥有着最高的权限操作,包括 : select(查询) ,update(修改) , delete(删除,有事没事都不要用这个,反正也不能给这 ...

  8. SDUT OJ 螺旋矩阵

    螺旋方阵 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 n×n的螺旋方阵当n=5和n=3时分别是如下的形式 请给出一个程序,对于 ...

  9. POJ2278 DNA Sequence —— AC自动机 + 矩阵优化

    题目链接:https://vjudge.net/problem/POJ-2778 DNA Sequence Time Limit: 1000MS   Memory Limit: 65536K Tota ...

  10. Storm worker 并行度等理解

    Storm 调优是非常重要的, 仅次于写出正确的代码, 好在Storm官网上有关于worker executors tasks的介绍, http://storm.incubator.apache.or ...