有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
     1、对于第一种重复,比较容易解决,使用
     select distinct * from tableName
     就可以得到无重复记录的结果集。
     如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
     select distinct * into #Tmp from tableName
     drop table tableName
     select * into tableName from #Tmp
     drop table #Tmp
     发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。
     
     2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下
     假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集
     select identity(int,1,1) as autoID, * into #Tmp from tableName
     select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
     select * from #Tmp where autoID in(select autoID from #tmp2)
     最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)

解决方案 »

  1.   

    select identity(int,1,1) as autoID, * into #t1 from abc
    select min(autoID) as autoID into #t2 from #t1 group by 日期
    select * from #t1 where autoID in (select autoID from #t2)
      

  2.   

    語法有問題,distinct不能夠放在字段中間和字段後面,呵呵
      

  3.   

    这是从蚂蚁那里学过来的:
    去除重复值
    如果有ID字段,就是具有唯一性的字段delect table where id not in (  select max(id) from table group by col1,col2,col3...
    )
    group by 子句后跟的字段就是你用来判断重复的条件,如只有col1,那么只要col1字段内容相同即表示记录相同。2,如果是判断所有字段也可以这样
      select * into #aa from table group by id1,id2,....
      delete table 
      insert into table 
      select * from #aa3,没有ID的情况select identity(int,1,1) as id,* into #temp from tabel
    delect # where id not in (
      select max(id) from # group by col1,col2,col3...)
    delect table
    inset into table(...)
       select ..... from #temp
    col1+','+col2+','...col5 联合主键
    select * from  table where col1+','+col2+','...col5 in (  select max(col1+','+col2+','...col5) from table 
    where having count(*)>1
    group by col1,col2,col3,col4 
    )
    group by 子句后跟的字段就是你用来判断重复的条件,如只有col1,那么只要col1字段内容相同即表示记录相同。2,
    select identity(int,1,1) as id,* into #temp from tabel
    select * from  #temp where id in (
      select max(id) from #emp where having count(*)>1 group by col1,col2,col3...)删除重复的,只留一条:alter table 表 add  newfield int identity(1,1)delete 表
    where newfield not in(
     select min(newfield) from 表 group by 除newfield外的所有字段
                         )alter table 表 drop column newfieldselect distinct * into #temp from 表
    truncate table 表
    insert 表 select * from #temp
    drop table #temp
      

  4.   

    select distinct 日期 from abc where 表号=1
      

  5.   

    各位高手,我是在程序里用到sql语句:
    现在用;select identity(int,1,1) as autoID, * into #Tmp from tableName
         select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
         select * from #Tmp where autoID in(select autoID from #tmp2)
    程序中怎么才能用到一条语句来实现???
    也就是说我只能用一知语句来完成.可以上是三条语句,怎样才可以压到一条语句中???请各位指点.
      

  6.   

    新增一个标识列,利用它来删除重复纪录:
      ALTER  TABLE  T1
      ADD  key_col  INT NOT null  IDENTITY
      DELETE  FROM  T1
      WHERE  EXISTS
            (  
            SELETE *
           FROM T1 AS T2
           WHERE  T2.C1=T1.C1  AND  T2.C2=T1.C2
           AND  T2.key_col> t1.key_col
          ALTER  TABLE  T1
          DROP   column  key_col
      

  7.   

    如果有ID字段,就是具有唯一性的字段delect table where id not in (  select max(id) from table group by col1,col2,col3...
    )
    group by 子句后跟的字段就是你用来判断重复的条件,如只有col1,那么只要col1字段内容相同即表示记录相同。2,如果是判断所有字段也可以这样
      select * into #aa from table group by id1,id2,....
      delete table 
      insert into table 
      select * from #aa3,没有ID的情况select identity(int,1,1) as id,* into #temp from tabel
    delect # where id not in (
      select max(id) from # group by col1,col2,col3...)
    delect table
    inset into table(...)
       select ..... from #temp
    col1+','+col2+','...col5 联合主键
    select * from  table where col1+','+col2+','...col5 in (  select max(col1+','+col2+','...col5) from table 
    where having count(*)>1
    group by col1,col2,col3,col4 
    )
    group by 子句后跟的字段就是你用来判断重复的条件,如只有col1,那么只要col1字段内容相同即表示记录相同。2,
    select identity(int,1,1) as id,* into #temp from tabel
    select * from  #temp where id in (
      select max(id) from #emp where having count(*)>1 group by col1,col2,col3...)删除重复的,只留一条:alter table 表 add  newfield int identity(1,1)delete 表
    where newfield not in(
     select min(newfield) from 表 group by 除newfield外的所有字段
                         )alter table 表 drop column newfieldselect distinct * into #temp from 表
    truncate table 表
    insert 表 select * from #temp
    drop table #temp