sql过滤重复数据几种方法

作者:简简单单 2011-09-05

在开发中经常会碰到关于有重复记录的数据,我们重想办法来过滤一些重复的记录,下面我总结了几种方法,希望对大家有用。

方法一,

 

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...)


实例

有一个表的结构是这样的

          id                 bookname                             cbs                             zz    
          001               asp教程大全                       清华大学出版社           田正平
          002               数据库教程系统教程         高等教育出版社         周奥英
          003               asp大全                       清华大学出版社           田正平
         
现在我想做一个查询,要查找出的字段如下

            bookname,   cbs,   zz  

按bookname字段过滤记录,但要显示多个字段

查询的结果应为

      bookname                 cbs                                 zz    
      asp大全                   清华大学出版社           田正平
      数据库系统教程     高等教育出版社           周奥英
       
    但是我不知道SQL语句该怎么写法,请大家指导

 


nononono(null,null):的方法可以解决完全重复的问题,如果有若干字段不重复
但还要显示怎么办?
例如上个例子中如果要显示
          id                 bookname                             cbs                             zz       new_id
(重复的记录时new_id是重复的,但其他的与其他的New_id记录不重复)
并且ID显示最大的值。应该怎样解决。
一般使用

Select   Max(id)   id   ,max(bookname)  
bookname,max(cbs)   cbs   ,max(zz)   zz   ,new_id     from   table     group   by   new_id


group by 子句后跟的字段就是你用来判断重复的条件,如只有col1,那么只要col1字段内容相同即表示记录相同。


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
)


/////////

select   t1.bookname,t1.zz,t1.cbs   from   table   t1
join   (   select   min(id)   as   id,bookname   from   table
              group   by   bookname   )   as   t2
on   t1.bookname   =   t2.bookname   and   t1.id   =   t2.id

相关文章

精彩推荐