本帖最后由 520vc 于 2010-07-19 22:53:04 编辑

解决方案 »

  1.   

    我常用的方法需要新建列
    先建一个自增列ID,然后表自连接
    删除 物资代码相等且ID不相等 的行还用过一种方法是用缓存表
    用dintinct 检索后反插
      

  2.   

    直接按顺序执行sql即可select distinct * into zz_tmp from Ttruncate table Tinsert into T select * from zz_tmp 
      

  3.   

    给你一个例子!
    ----------------------
    删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
    delete from people
    where peopleId in (select   peopleId from people group by   peopleId   having count(peopleId) > 1)
    and rowid not in (select min(rowid) from   people group by peopleId having count(peopleId )>1)
      

  4.   

    "select * from T group by 物资代码 having count(*)>1"提示不能使用“*”,上面的语句我要查询所有字段,该怎么修改?
      

  5.   

    2楼的方法最通用。
    3楼性能更好,不过只适合 Oracle 数据库。
      

  6.   

    我现在可以查询出来重复记录了,语句如下:
    "select * from T " where  物资代码 in (select 物资代码 from T group by 物资代码 having count(*)>1)"
      

  7.   


    select distinct * 
    from T  
    where 物资代码 in (select 物资代码 from T group by 物资代码 having count(*)>1)
      

  8.   

    我有与楼主同样的经历,删除数据前一定要反复确认。
    1 在T 中插入一条名为 id 的自增序号字段,用以确定唯一性,
    2 然后 插入 3 条或以上 物资代码 相同的测试数据,厂家地址可以不同,
     物资代码 要特殊些最好是99999999 这样T表中不曾有过的。
    3 运行下面的语句,
    SELECT * FROM T WHERE (id NOT IN  (SELECT MIN(id) AS mid  FROM T  GROUP BY 物资代码))
    如果插入的 三条测试数据显示其中两条,说明语句没问题4 把上述语句中  select * 改为 delete 即可,运行
    delete  FROM T WHERE (id NOT IN  (SELECT MIN(id) AS mid  FROM T  GROUP BY 物资代码))当 物资代码 相同 但其他字段有不同时:
    其中 MIN(id) 可以保留第一次录入的数据,
    改为 Max(id) 可以保留最后一次录入的数据
      

  9.   


    create table aa

    id1 int ,
    id2 int
    )insert into aa values(2,2)
    insert into aa values(2,2)
    insert into aa values(2,2)select id=identity(int,1,1),*   into   #t1   from   aa   
      drop   table   aa   
      select distinct  id1,id2  into   aa   from   #t1