在開發中經常會碰到關於有重復記錄的數據,我們重想辦法來過濾一些重復的記錄,下面我總結了幾種方法,希望對大家有用。
方法一,
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