是的,另一个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。 我并不需要检查的行之间重复 - 同一个电话号码可以在同一行中多行之间存在,只是没有在不同的列。
任何人都可以提出来摆脱这些重复的最佳方式?
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
您可以通过找到他们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子句中较少的比较)到另一列(除了第一个)。