SQL Server 2008: delete duplicate rows -


i have duplicate rows in table, how can delete them based on single column's value?

eg

uniqueid, col2, col3 ... 1, john, simpson 2, sally, roberts 1, johnny, simpson  delete duplicate uniqueids   1, john, simpson 2, sally, roberts 

you can delete cte:

with cte (select *,row_number() over(partition uniqueid order col2)'rowrank'              table) delete cte  rowrank > 1 

the row_number() function assigns number each row. partition by used start numbering on each item in group, in case each value of uniqueid start numbering @ 1 , go there. order by determines order numbers go in. since each uniqueid gets numbered starting @ 1, record row_number() greater 1 has duplicate uniqueid

to understanding of how row_number() function works, try out:

select *,row_number() over(partition uniqueid order col2)'rowrank' table order uniqueid 

you can adjust logic of row_number() function adjust record you'll keep or remove.

for instance, perhaps you'd in multiple steps, first deleting records same last name different first names, add last name partition by:

with cte (select *,row_number() over(partition uniqueid, col3 order col2)'rowrank'              table) delete cte  rowrank > 1 

Comments

Popular posts from this blog

c# - Send Image in Json : 400 Bad request -

jquery - Fancybox - apply a function to several elements -

An easy way to program an Android keyboard layout app -