zoukankan      html  css  js  c++  java
  • 获取唯一的或是删除重复的记录

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

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

     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 TempData
    DELETE FROM TempData WHERE [DuplicateCount] > 1 
    GO
    
    SELECT [Item],[Designation],[Qty] FROM [dbo].[Data]
    GO
    Source Code
  • 相关阅读:
    控制台——args参数的赋值方法
    整数排序的几种方法
    基于CentOS系统下的Oracle的安装
    QT的学习
    HDU 2104 hide handkerchief
    HDU 2103 Family Plan
    HDU 2115 I Love This Game
    HDU 2100 Lovekey
    猜数字游戏
    利用Hough变换识别图像中的直线
  • 原文地址:https://www.cnblogs.com/insus/p/6767383.html
Copyright © 2011-2022 走看看