Sql server 查找和删除SQL Server行中的重复列值

Sql server 查找和删除SQL Server行中的重复列值,sql-server,tsql,sql-server-2008-r2,duplicates,Sql Server,Tsql,Sql Server 2008 R2,Duplicates,是的,另一个SQL重复问题:) 我有一个SQL Server 2008 R2表,其中有多个电话号码列,看起来像: ID Tel1 Tel2 Tel3 Tel4 Tel5 Tel6 1 123 456 789 NULL NULL NULL 2 123 456 123 123 NULL NULL 3 456 789 123 456 NULL NULL 我想从每一行中删除重复的

是的,另一个SQL重复问题:)

我有一个SQL Server 2008 R2表,其中有多个
电话号码
列,看起来像:

ID   Tel1   Tel2   Tel3   Tel4   Tel5   Tel6
 1    123    456    789   NULL   NULL   NULL
 2    123    456    123    123   NULL   NULL
 3    456    789    123    456   NULL   NULL
我想从每一行中删除重复的电话号码-例如,在第ID2行中,我需要将Tel3和Tel4设置为NULL,在第3行中,我需要将Tel4设置为NULL。我不需要检查行与行之间是否存在重复项-同一电话号码可以存在于多行之间,但不能存在于同一行的不同列中


有人能提出消除这些重复项的最佳方法吗?

您可以使用
UNPIVOT
找到它们

select id, telNo 
from phonenumbertable
unpivot 
( telNo for tel in (tel1, tel2, tel3, tel4,tel5, tel6)) as u    
group by id,telno
having COUNT(telno)>1

您可以使用
UNPIVOT

select id, telNo 
from phonenumbertable
unpivot 
( telNo for tel in (tel1, tel2, tel3, tel4,tel5, tel6)) as u    
group by id,telno
having COUNT(telno)>1

一种可能的方法是如下更新:

update tablename
set Tel6 = null
where Tel6 = Tel5 or Tel6 = Tel4 or Tel6 = Tel3 or Tel6 = Tel3 or Tel6 = Tel2 or Tel6 = Tel1

然后对其他列(第一列除外)执行相同的更新(where子句中的比较较少)。

一种可能的方法是如下更新:

update tablename
set Tel6 = null
where Tel6 = Tel5 or Tel6 = Tel4 or Tel6 = Tel3 or Tel6 = Tel3 or Tel6 = Tel2 or Tel6 = Tel1
然后对其他列(第一列除外)执行相同的更新(where子句中的比较更少)。


好的,这有助于我找到重复的,但是把它们调零怎么样?好的,这有助于我找到重复的,但是把它们调零怎么样?@NikolaMarkovinović+1没有想到一步到位,很好!)@尼古拉·马尔科维诺维奇+1没有想到一步到位,很好的一步!:)