1

是的,另一个 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

我想从每一行中删除重复的电话号码 - 例如,在第 2 行中,我需要将 Tel3 和 Tel4 设为 NULL,在第 3 行中我需要将 Tel4 设为 NULL。我不需要检查行之间的重复项 - 相同的电话号码可以存在于多行之间,而不是同一行的不同列中。

谁能建议摆脱这些重复项的最佳方法?

4

3 回答 3

2

Sql Fiddle 在这里

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
于 2012-07-31T10:21:51.977 回答
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
于 2012-07-31T10:13:59.920 回答
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 子句中的比较较少)。

于 2012-07-31T10:14:02.143 回答