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.