La primera (y más obvia) respuesta es limpiar los datos para que no tenga duplicados. Parece probable que los datos de muestra que proporcionó sean el resultado de un error.
En cuanto a merge
declaración, si los datos en realidad están puramente duplicados, puede usar distinct
:
MERGE INTO maintable pr
USING (SELECT DISTINCT contract,
membertype,
address1,
city,
state,
zipcode,
countrycode
FROM incrementaltable pra
WHERE pra.membertype = 'Parent')
ON (pr.contract = pra.contract)
WHEN MATCHED THEN
UPDATE SET pr.address1 = pra.address1,
pr.city = pra.city,
pr.state = pra.sate,
pr.zipcode = pra.zipcode,
pr.countrycode = pra.countrycode
WHERE address1 IS NULL AND pr.membertype <> 'Parent'