首页 > 代码库 > 获取唯一的或是删除重复的记录

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

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

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

 

技术分享
 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 TempDataDELETE FROM TempData WHERE [DuplicateCount] > 1 GOSELECT [Item],[Designation],[Qty] FROM [dbo].[Data]GO
Source Code

 

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