SQLSERVER 怎樣去除重覆記錄

2022-02-26 10:34:07 字數 1676 閱讀 7517

【sqlserver】怎樣去除重覆記錄

有兩個意義上的重覆記錄,一是完全重複的記錄,也即所有欄位均重複的記錄,二是部分關鍵字段重複的記錄,比如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,要求得到這個字段唯一的結果集   

delete persons where id in

(select id from (select name,max(id) as id ,count(*) as rcount from persons group by title) a where rcount>1

)在查詢分析器中迴圈執行若干邊,直到影響行數為0為止即可去除所有重覆記錄。

查詢同一表內多字段同時重覆記錄的sql語句

比如現在有一人員表  (表名:peosons) 

若想將姓名、身份證號、住址這三個字段完全相同的記錄查詢出來  

select   p1.*   from   persons   p1,persons   p2   where   p1.id<>p2.id   and   p1.cardid   =   p2.cardid   and   p1.pname   =   p2.pname   and   p1.address   =   p2.address

使用一條sql語句刪除表中重覆記錄

tempa表中有三個字段,id唯一且為主鍵,自動增長; positionname,englishpositionname中有重複的記錄,比如:

id      positionname        englishpositionname

20     其他                           others

21     質量工程師               qc engineer 

22     其他                           others

.......

100  質量工程師qc engineer 

需要剔除重複的"其他","質量工程師"等記錄。

採用的sql語句:

delete from tempa where id not in (

select max(t1.id) from tempa t1 group by

t1.positionname,t1.englishpositionname)

說明:(1)需要剔除那幾個用於判斷重複的字段,則將它們放在group by語句之後。

(2)max(t1.id) 也可以改成:min(t1.id)

sqlserver去除重複列 行

最近做乙個資料庫的資料匯入功能,發現聯合主鍵約束導致不能匯入,原因是源表中有重複資料,但是源表中又沒有主鍵,很是麻煩。經過努力終於解決了,現在就來和大家分享一下,有更好的辦法的可以相互交流。有重複資料主要有一下幾種情況 1.存在兩條完全相同的紀錄 這是最簡單的一種情況,用關鍵字distinct就可以...

sqlserver 去除 重複列 行

有重複資料主要有一下幾種情況 1.存在兩條完全相同的紀錄 這是最簡單的一種情況,用關鍵字distinct就可以去掉 example select distinct from table 表名 where 條件 2.存在部分字段相同的紀錄 有主鍵id即唯一鍵 如果是這種情況的話用distinct是過濾...

sqlserver 去除重複的行資料

利用distinct 關鍵字過濾重複的行,將查詢的結果寫入臨時表 select distinct into temp from mytable 刪除原表的資料delete mytable 將臨時表插入到表中insert mytable select from temp 釋放臨時表drop table...