是的,另一个SQL重复问题:)
我有一个包含多个phone number
列的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
我想从每一行中删除重复的电话号码 - 例如,在行ID 2中,我需要NULL Tel3和Tel4,而在第3行我需要NULL Tel4。我不需要检查行之间的重复 - 在多行之间可以存在相同的电话号码,而不是在同一行的不同列中。
有人能建议摆脱这些重复的最佳方法吗?
答案 0 :(得分:2)
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
答案 1 :(得分: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
答案 2 :(得分: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子句中进行较少的比较)。