在SQL Server行查找并删除重复的列值(Finding and removing duplic

2019-10-17 02:05发布

是的,另一个SQL复制质疑:)

我有多个在SQL Server 2008 R2表phone number列,看起来像:

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

我想从每行中删除重复的电话号码 - 例如,行ID 2,我需要为NULL Tel3和TEL4,并在第3行,我需要NULL TEL4。 我并不需要检查的行之间重复 - 同一个电话号码可以在同一行中多行之间存在,只是没有在不同的列。

任何人都可以提出来摆脱这些重复的最佳方式?

Answer 1:

SQL小提琴这里 。

update PhoneNumbers
   set Tel2 = case when Tel1 = Tel2 
                   then null 
                   else Tel2 end,
       Tel3 = case when Tel3 in (Tel1, Tel2) 
                   then null 
                   else Tel3 end,
       Tel4 = case when Tel4 in (Tel1, Tel2, Tel3) 
                   then null 
                   else Tel4 end,
       Tel5 = case when Tel5 in (Tel1, Tel2, Tel3, Tel4) 
                   then null 
                   else Tel5 end,
       Tel6 = case when Tel6 in (Tel1, Tel2, Tel3, Tel4, Tel5) 
                   then null 
                   else Tel6 end


Answer 2:

您可以通过找到他们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


Answer 3:

一种可能的方式是这样来更新它:

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

然后执行相同的更新(与where子句中较少的比较)到另一列(除了第一个)。



文章来源: Finding and removing duplicate column values in a SQL Server row