WITH Pivoted AS
(
SELECT person_ID, eye, hair, teeth
FROM SourceBodyPartColors
PIVOT
(
MAX (color) FOR body_part_name IN ( [eye], [hair], [teeth] )
) AS pvt
)
MERGE TargetBodyPartColors AS target
USING Pivoted AS source
ON (target.person_ID = source.person_ID)
WHEN MATCHED THEN
UPDATE SET eye_color = source.eye,
hair_color = source.hair,
teeth_color = source.teeth ;