Vì bây giờ bạn đang nhân điểm, trước tiên chúng ta cần quyết định xem điểm số là bao nhiêu nếu các mã không khớp nhau. Tôi cho rằng, nó phải là 0. Tiếp theo, chúng ta nên chia tất cả các mã có thể thành các nhóm độc lập, nghĩa là kết quả không phụ thuộc vào các thành viên nhóm khác. Đây là (1,2,4) và (8). Và xác định quy tắc cho mọi nhóm. Vì vậy,
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;