Puisque maintenant vous multipliez les scores, nous devons d'abord décider quel est le score si aucun des codes ne correspond. Je suppose que ce devrait être 0.Ensuite, nous devrions diviser tous les codes possibles en groupes indépendants, c'est-à-dire dont les résultats ne dépendent pas des autres membres du groupe. Les voici (1,2,4) et (8). Et définissez la règle pour chaque groupe.Alors
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;