/ / SQL रैंक कॉलम स्थिति के आधार पर - sql, sql-server, tsql, चुनें

स्थिति पर आधारित एसक्यूएल रैंक कॉलम - एसक्यूएल, एसक्यूएल-सर्वर, tsql, चयन करें

RankFunction

तालिका डेटा से मुझे रैंक कॉलम प्राप्त करना चाहिए। निम्न स्थितियों के आधार पर अद्वितीय डन का चयन करना है:

  1. मैक्स (ConfidenceCode)
  2. यदि Confindencde समान है, यदि DeliveryAddressSeq = 0 में केवल एक पंक्ति है, तो उसे चुनें
  3. यदि Confindencde एक समान है, यदि DeliveryAddressSeq = 0 में कई पंक्तियाँ हैं तो CustomerCode का चयन करें

तो, आखिरकार मुझे आवश्यकता है Rank=1 वांछित आउटपुट के रूप में डेटा

उत्तर:

उत्तर № 1 के लिए 1

The 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