为了账号安全,请及时绑定邮箱和手机立即绑定

获取唯一的或是删除重复的记录

标签:
SQL Server

在某一数据表中,数据有冗余了,我们需要获取唯一的记录。

同这样的问题,使用例子来说时,最简单了。
创建一张数据表:

 

 CREATE TABLE dbo.Data(     [ID] int IDENTITY(1,1) NOT NULL,     [Item] varchar(55) NULL,          [Designation] varchar(20) NULL,    [Qty] decimal(10, 2) NULL )  GO

Source Code


为这张表,添加一些数据,注意一些数据已经重复了:

 

 INSERT INTO [dbo].[Data] ([Item],[Designation],[Qty])  VALUES  (N'A001',N'DES',1),  (N'A001',N'DES',1),  (N'A003',N'TSG',12),   (N'A015',N'MTT',6),   (N'A360',N'OSS',7),   (N'A360',N'OSS',7),  (N'A360',N'OSS',7),    (N'A521',N'FPP',4),   (N'A015',N'MTT',6),  (N'A741',N'BBS',9),   (N'A741',N'BBS',9),   (N'A003',N'TSG',12),  (N'A015',N'MTT',6)  GO

Source Code



如果数据是较高的一些版本,接下来使用ROW_NUMBER()来过滤数据:

WITH TempData ([Item],[Designation],[Qty],[DuplicateCount])AS(    SELECT [Item],[Designation],[Qty],ROW_NUMBER() OVER(PARTITION by [Item],[Designation],[Qty] ORDER BY [Item],[Designation],[Qty])     AS [DuplicateCount]    FROM [dbo].[Data])SELECT * FROM TempData

Source Code


上面只是知道哪些数据是在重复的。现在我们需要对上面的SQL语句稍改一下,把重复的记录删除:


WITH TempData ([Item],[Designation],[Qty],[DuplicateCount])AS(    SELECT [Item],[Designation],[Qty],ROW_NUMBER() OVER(PARTITION by [Item],[Designation],[Qty] ORDER BY [Item],[Designation],[Qty])     AS [DuplicateCount]    FROM [dbo].[Data])--SELECT * FROM TempDataDELETE FROM TempData WHERE [DuplicateCount] > 1 GOSELECT [Item],[Designation],[Qty] FROM [dbo].[Data]GO

Source Code

 

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消