SQL Server Indonesia User Groups Community Menghapus data duplikat didalam table - SQL Server Geeks
Welcome to SQL Server User Group Indonesia
Sign in JoinHelp | Sign In Live ID

SQL Server Geeks

I am not SQL Addicted , but I am SQL Geeks

Menghapus data duplikat didalam table

Kita bisa gunakan cara dengan menampung semua informasi yang duplicate ke temporary data dengan terlebih dahulu menjumlahkan value yang ada, lalu kemudian data yang duplikat di table kita delete. Setelah itu data dari table temporary tadi dimasukkan ke dalam table, sehingga sekarang di table tidak terdapat informasi yang duplikat lagi.

Perlu diingat ketika kita menghapus sebuah row maka kita akan kehilangan informasi yang mungkin kita butuhkan. Jika column yang ada hanya berupa 3 column dan informasinya termasuk key field saja maka tidak akan ada masalah. Yang menjadi masalah adalah ketika ada field lain yang berpengaruh seperti pada contoh yang saya buat adalah field value ketika kita menghapus data yang duplikat tetapi nilai field valuenya berbeda kita akan kehilangan informasi dari field value tersebut.

Karenanya hendaknya informasi penting selain key tidak menjadi hilang dikarenakan key duplikat. Pada contoh dibawah saya menjumlahkan terlebih dahulu field value untuk setiap data yang duplikat dan disimpan ke temptable, untuk seterusnya dimasukkan kembali ke Mytable dengan nilai field value yang sudah di SUM.

Berikut Contoh Scrip untuk menghilangkan duplicate data (silahkan di copy paste di Query analyser)

-------------------------- Begin Script -----------------------------

--Create Table MyTable

CREATE TABLE [dbo].[MyTable](

[FieldA] [nchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

[FieldB] [nchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

[FieldC] [nchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

[Value] [int] NULL

) ON [PRIMARY]

--Insert Data to Table

INSERT INTO [dbo].[MyTable] ([FieldA],[FieldB],[FieldC],[Value])

VALUES ('A1','B1','C1',10)

INSERT INTO [dbo].[MyTable] ([FieldA],[FieldB],[FieldC],[Value])

VALUES ('A2','B2','C2',20)

INSERT INTO [dbo].[MyTable] ([FieldA],[FieldB],[FieldC],[Value])

VALUES ('A3','B3','C3',30)

INSERT INTO [dbo].[MyTable] ([FieldA],[FieldB],[FieldC],[Value])

VALUES ('A3','B3','C3',40)

INSERT INTO [dbo].[MyTable] ([FieldA],[FieldB],[FieldC],[Value])

VALUES ('A4','B4','C4',50)

INSERT INTO [dbo].[MyTable] ([FieldA],[FieldB],[FieldC],[Value])

VALUES ('A4','B4','C4',60)

-- Display All MyTable Data

Select * from [MyTable]

--Copy All Duplicate Data To #TempTable Table and Sum the Duplicate value

Select FieldA,Fieldb,FieldC,Sum(Value) as Value into #TempTable

from [MyTable]

where cast(FieldA as nvarchar(5)) +

cast(FieldB as nvarchar(5)) +

cast(FieldC as nvarchar(5))

in (

select

cast(FieldA as nvarchar(5)) +

cast(FieldB as nvarchar(5)) +

cast(FieldC as nvarchar(5))

from [MyTable]

group by FieldA, FieldB, FieldC

having count(

cast(FieldA as nvarchar(5)) +

cast(FieldB as nvarchar(5)) +

cast(FieldC as nvarchar(5)))>1)

Group by FieldA,Fieldb,FieldC

--Display All temptable data

select * from #TempTable

--Delete All Duplicate data in MyTable

Delete from [MyTable]

where cast(FieldA as nvarchar(5)) +

cast(FieldB as nvarchar(5)) +

cast(FieldC as nvarchar(5))

in (

select distinct

cast(FieldA as nvarchar(5)) +

cast(FieldB as nvarchar(5)) +

cast(FieldC as nvarchar(5))

from [MyTable]

group by FieldA, FieldB, FieldC

having count(cast(FieldA as nvarchar(5)) +

cast(FieldB as nvarchar(5)) +

cast(FieldC as nvarchar(5)))>1)

--Insert Data from Temptable to MyTable

insert into [MyTable] Select FieldA,Fieldb,FieldC,Value from #TempTable

--Display All MyTable Data

select * from [MyTable]

-- Drop All Table

drop table [MyTable]

drop table #TempTable

------------------------ End Script ----------------------------