Actualizar columna para que sean diferentes valores agregados

Estoy creando un script para "fusionar" y eliminar filas duplicadas de una tabla. La tabla contiene información de dirección y utiliza un campo entero para almacenar información sobre el correo electrónico como marcas de bit (nombre de columna lngValue). Por ejemplo, lngValue & 1 == 1 significa que es la dirección principal.

Hay instancias en las que se ingresó el mismo correo electrónico dos veces, pero a veces con diferentes valores de lng. Para resolver esto, necesito tomar el lngValue de todos los duplicados y asignarlos a un registro superviviente y eliminar el resto.

Mi mayor dolor de cabeza en lo que respecta a la "fusión" de los registros. Lo que quiero hacer es bit a bit o todos los lngValues ​​de registros duplicados juntos. Aquí está lo que tengo hasta ahora, que solo encuentra el valor de todos los valores de LngValues ​​en modo bit o juntos.

Advertencia: código desordenado por delante

declare @duplicates table
(
lngInternetPK int,
lngContactFK int,
lngValue int
)

insert into @duplicates (lngInternetPK, lngContactFK, lngValue) 
(
select  tblminternet.lngInternetPK, tblminternet.lngContactFK, tblminternet.lngValue   from tblminternet  inner join 
(select strAddress, lngcontactfk, count(*) as count from tblminternet where lngValue & 256 <> 256 group by strAddress, lngcontactfk) secondemail
On tblminternet.strAddress = secondemail.strAddress and
tblminternet.lngcontactfk = secondemail.lngcontactfk 
where count > 1 and tblminternet.strAddress is not null and tblminternet.lngValue & 256 <> 256 --order by lngContactFK, strAddress
)

update @duplicates set lngValue = t.val

from 
                (select (sum(dupes.lngValue) & 65535) as val from 
                    (select  here.lngInternetPK,                     here.lngContactFK, here.lngValue from tblminternet here  inner join 
                    (select strAddress, lngcontactfk, count(*) as count from tblminternet where lngValue & 256 <> 256 group by strAddress, lngcontactfk) secondemail
                    On here.strAddress = secondemail.strAddress     and
                    here.lngcontactfk = secondemail.lngcontactfk 
                    where count > 1 and here.strAddress is not      null and here.lngValue & 256 <> 256) dupes, tblminternet this

                where this.lngContactFK = dupes.lngContactFK
                ) t
where lngInternetPK in (select lngInternetPK from @duplicates)    

Editar:
Como se solicita aquí hay algunos datos de muestra:

Nombre de la tabla: tblminternet
Nombres de columna:
lngInternetPK
lngContactFK
lngValue
dirección

Ejemplo de fila 1:
lngInternetPK: 1
lngContactFK: 1
lngValor: 33
strAddress: "[email protected]"

Ejemplo fila 2:
lngInternetPK: 2
lngContactFK: 1
lngValor: 40
strAddress: "[email protected]"

Si estos dos se fusionaron aquí es el resultado deseado:
lngInternetPK: 1
lngContactFK: 1
lngValor: 41
strAddress: "[email protected]"

Otras reglas necesarias:
Cada contacto puede tener varios correos electrónicos, pero cada fila de correo electrónico debe ser distinta (cada correo electrónico solo puede aparecer como una fila).

Respuestas a la pregunta(3)

Su respuesta a la pregunta