• How about this?

    ; WITH RankedListed (CNo, CId, [Rank]) AS

    (

    SELECT T.CNO

    ,T.CId

    ,ROW_NUMBER()

    OVER ( PARTITION BY T.CNO

    ORDER BY CASE WHEN COUNT(*) = 1 THEN T.CId

    ELSE COUNT(*)

    END

    DESC) AS 'Rank'

    FROM #temp T

    LEFT JOIN #temp1 T1

    ON T.CNO = T1.CNo

    AND T.CId = T1.CId

    GROUP BY T.CNO

    ,T.CId

    --ORDER BY T.CNO

    --,T.CId

    )

    SELECT RL.CNo , RL.CId

    FROM RankedListed RL

    WHERE RL.[Rank] = 1

    Thanks for posting the readily-consumable test data.