1

はい、別のSQLは質問を複製します:)

複数の列を持つSQLServer2008 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ではTel3とTel4をNULLにする必要があり、3行目ではTel4をNULLにする必要があります。行間の重複をチェックする必要はありません。同じ電話番号が複数の行の間に存在する可能性がありますが、同じ行の異なる列には存在しない可能性があります。

誰かがこれらの重複を取り除くための最良の方法を提案できますか?

4

3 に答える 3

2

ここに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
于 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

考えられる方法の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 に答える