चूंकि अब आप अंकों को गुणा कर रहे हैं, पहले हमें यह तय करने की आवश्यकता है कि यदि कूटों में से किसी का भी मिलान नहीं होता है तो स्कोर क्या होगा। मुझे लगता है, यह 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;