我有一个产品表ProductSpec,typeid,brand,encapsulation,area
 
上面五个字段确定产品的惟一性,  
现在表里有几万条记录是重复的,   如果去除多余重复的记录 呢

解决方案 »

  1.   

    select Spec,typeid,brand,encapsulation,area
    from Product
    group by Spec,typeid,brand,encapsulation,area
      

  2.   

    select * from (
         select  Spec,typeid,brand,encapsulation,area,dense_rank()
            over(partition by  Spec,typeid,brand,encapsulation,area 
           order by  Spec,typeid,brand,encapsulation,area  desc ) igroup
    from Product) PD 
    where PD.igroup > 1 
      

  3.   

    需要根据数据进行筛选。比如:exists方式删除其中的一条重复记录,但需要其他字段结合判断。
    同时也可以distinct 记录导出表,再导回。
      

  4.   

    --查询过滤重复:
    ;WITH t AS
    (
        SELECT rn = ROW_NUMBER()OVER(
                   PARTITION BY spec ORDER BY typeid DESC, brand DESC, encapsulation DESC, area DESC
               ), * 
        FROM Product
    )
    SELECT Spec, typeid, brand, encapsulation, area 
    FROM t
    WHERE rn = 1 --删除重复数据:
    ;WITH t AS
    (
        SELECT rn = ROW_NUMBER()OVER(
                   PARTITION BY spec ORDER BY typeid DESC, brand DESC, encapsulation DESC, area DESC
               ), * 
        FROM Product
    )
    DELETE t
    WHERE rn > 1