• Okay, here's the DELETE as a CTE, which is probably the easiest way to do it... (once you read the crib notes)

    ; WITH CTE_DupeAddr(DupeID, ID, Cid, FName, LName, DOB, City) AS

    (

    SELECT

    ROW_NUMBER() OVER (PARTITION BY FName, LName, DOB, City ORDER BY FName, LName) AS DupeID

    , ID

    , [SID]

    , FName

    , LName

    , DOB

    , City

    FROM #TableA

    )

    /*

    -- show what will be deleted

    SELECT * FROM CTE_DupeAddr

    WHERE DupeID>1;

    */

    DELETE

    FROM CTE_DupeAddr

    WHERE DupeID>1;

    (Gotta love Rick Morelan's simple examples!)

    comment out the SELECT/DELETE statement, depending on which you want to run. The Select will show which records will be deleted. The other will just delete them.