码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-04-26 11:46:04      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:close   sed   eve   img   design   number   png   过滤   item   

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

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

 

技术分享
 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
  (NA001,NDES,1),
  (NA001,NDES,1),
  (NA003,NTSG,12), 
  (NA015,NMTT,6), 
  (NA360,NOSS,7), 
  (NA360,NOSS,7),
  (NA360,NOSS,7),  
  (NA521,NFPP,4), 
  (NA015,NMTT,6),
  (NA741,NBBS,9), 
  (NA741,NBBS,9), 
  (NA003,NTSG,12),
  (NA015,NMTT,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 TempData
DELETE FROM TempData WHERE [DuplicateCount] > 1 
GO

SELECT [Item],[Designation],[Qty] FROM [dbo].[Data]
GO
Source Code

 

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

标签:close   sed   eve   img   design   number   png   过滤   item   

原文地址:http://www.cnblogs.com/insus/p/6767383.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!