Eftersom du nu multiplicerar poäng, måste vi först bestämma vad poängen är om ingen koder matchas. Jag antar att det borde vara 0. Därefter bör vi dela upp alla möjliga koder i oberoende grupper, det vill säga vilka resultat inte beror på andra gruppmedlemmar. Här är de (1,2,4) och (8). Och definiera regeln för varje grupp. Så
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;