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