तालिका डेटा से मुझे रैंक कॉलम प्राप्त करना चाहिए। निम्न स्थितियों के आधार पर अद्वितीय डन का चयन करना है:
- मैक्स (ConfidenceCode)
- यदि Confindencde समान है, यदि DeliveryAddressSeq = 0 में केवल एक पंक्ति है, तो उसे चुनें
- यदि Confindencde एक समान है, यदि DeliveryAddressSeq = 0 में कई पंक्तियाँ हैं तो CustomerCode का चयन करें
तो, आखिरकार मुझे आवश्यकता है Rank=1
वांछित आउटपुट के रूप में डेटा
उत्तर:
उत्तर № 1 के लिए 1The rank
खिड़की समारोह चाल करना चाहिए:
SELECT Duns, ConfidenceCode, DeliveryAddressSeq, CustomerCode
FROM (SELECT Duns, ConfidenceCode, DeliveryAddressSeq, CustomerCode,
RANK() OVER (PARTITION BY duns
ORDER BY ConfidenceCode ASC,
CASE DeliveryAddressSeq WHEN 0 THEN 0
ELSE 1
END ASC,
CustomerCode DESC) AS rk
FROM mytable)
WHERE rk = 1
उत्तर № 2 के लिए 1
चूंकि आप केवल रैंक 1 करना चाहते थे, आप ग्राहक कोड 501, 504, 507 की तलाश में थे
SELECT duns,
confidencecode,
deliveryaddressseq,
customercode,
[rank]
FROM (SELECT *,
RANK() OVER (PARTITION BY duns
ORDER BY confidencecode DESC,
deliveryaddressseq,
customercode) AS [rank]
FROM t_duns) tt
WHERE [rank] = 1
परिणाम
duns confidencecode deliveryaddressseq customercode rank
1001 10 1 501 1
1002 10 0 504 1
1003 10 0 507 1