Тъй като сега умножавате резултати, първо трябва да решим какъв е резултатът, ако няма съвпадение на кодове. Предполагам, че трябва да е 0. След това трябва да разделим всички възможни кодове на независими групи, т.е. резултатите да не зависят от членовете на другите групи. Ето ги (1,2,4) и (8). И дефинирайте правилото за всяка група. И така
SELECT [id] ,[name],r =
-- At least one of values needed to get score > 0
MAX(CASE WHEN code IN (1,2,4, 8) THEN 1.0 ELSE 0.0 END) *
-- Now rules for every independent set of codes. Rule should return score if matched or 1.0 if not matched
-- (1,2,4)
coalesce(MAX(CASE WHEN [code] IN (1,2,4) THEN 0.70 END), 1.0 ) *
-- (8)
coalesce(MAX(CASE WHEN [code] IN (8) THEN 0.75 END), 1.0)
-- more ?
FROM (values (1, 'ali',4)
,(1, 'ali',1)
,(1, 'ali',8)
,(1, 'ali',2)
,(2, 'sunny',1)
,(4, 'arslan',4)) as t(id, name,code)
GROUP BY id, name;