[TSQL]解決資料表內資料重複問題

1.先找出重複的資料有哪些,重複多少筆
2.給予整個資料表一個 IDENTITY ,用來區分出既使資料重複,也有一個欄位不同。
3.再將有重複的資料排序好厚新增到暫存的資料表
4.透過 DELETE 指令,以暫存的資料表的serial(剛剛建立出來的Identity)取餘數的方式就能找到唯一的serial 來Delete重複的資料。
詳細請看下面之前寫下來的說明,野人獻曝,還請大家多多指教。

這是比較早之前協助朋友發生的問題,是當資料表內重複的資料完全都一樣,
要把重複的資料,只要保留一筆就好的方式,
用的方法蠻硬幹的,整個處理的流程是
1.先找出重複的資料有哪些,重複多少筆
2.給予整個資料表一個 IDENTITY ,用來區分出既使資料重複,也有一個欄位不同。
3.再將有重複的資料排序好厚新增到暫存的資料表
4.透過 DELETE 指令,以暫存的資料表的serial(剛剛建立出來的Identity)取餘數的方式就能找到唯一的serial
來Delete重複的資料。

詳細請看下面之前寫下來的說明,野人獻曝,還請大家多多指教。


 

// 解決DB 中大內資料重複的問題又沒有任何件可以判斷的欄位問題

1.先下TSQL找出重複有多少資料

 

-- 1. 先下TSQL找出重複有多少資料
SELECT DISTINCT A1,A2,Count(*)  AS 重複比數
FROM Table1    
GROUP BYA1,A2  
having COUNT(*)  > 1

 

欄位都一樣的重複

clip_image004
2. 增加一個no 來做不同的判別

ALTER TABLE iboard

ADD serial INT IDENTITY

3.因此有了不同的seria.

clip_image006

4.找出有重複的資料群

SELECT DISTINCT(Board_ID),serial FROM iboard

WHERE board_id

IN (select board_id from iboard group by board_id having count(*)>1)

order by board_ID

clip_image008

--5.為了只選其中一個所有要再度編號 創立一個暫時純放的TABLE

DECLARE @TempDB TABLE

(no int IDENTITY(1,1),

bid varchar(50),

serial int

) -6.把資料排序後INSERT到tempDB

INSERT tempDB (bid,serial)

SELECT DISTINCT(Board_ID),serial FROM iboard

WHERE board_id

IN (select board_id from iboard group by board_id having count(*)>1)

order by board_ID

-- 7.可以看到他依序的排好

SELECT * FROM TempDB

clip_image010

--所以只要取餘數的方式就能找到唯一的serial 來Delete重複的table

--8. 刪除重複的Table方法

DELETE iBoard WHERE serial IN (

SELECT serial FROM TempDB

WHERE (no % 2 ) = 0 )

clip_image012

--9.把剛才增加的欄位刪除掉

ALTER TABLE iboard

DROP serial