2012-09-20 18 views
32

मेरे पास एक डेटा सेट है जिसमें कॉलम Date, Cat, और QTY शामिल हैं। मैं जो करना चाहता हूं वह एक अद्वितीय कॉलम जोड़ता है जो पंक्ति गणना के दौरान अद्वितीय Cat मानों की गणना करता है। यह वह जगह है क्या मैं अपने परिणाम सेट की तरह लग रहे हैं:row_number() समूह द्वारा?

enter image description here

नीचे SQL क्वेरी का उपयोग करके, मैं row_number() फ़ंक्शन का उपयोग पंक्ति प्राप्त करने में सक्षम हूँ।

हालांकि, मुझे उस अद्वितीय कॉलम को नहीं मिला है जिसे मैंने ऊपर दिखाया है। जब मैं OVER खंड में समूह जोड़ता हूं, तो यह काम नहीं करता है। क्या किसी के पास कोई विचार है कि मैं इस अद्वितीय गिनती कॉलम को कैसे काम कर सकता हूं?

SELECT 
    Date,  
    ROW_NUMBER() OVER (PARTITION BY Date ORDER By Date, Cat) as ROW, 
    Cat, 
    Qty 
FROM SOURCE 

उत्तर

13
DENSE_RANK() OVER (PARTITION BY date ORDER BY cat) 
+0

धन्यवाद, यह सही दिशा में एक कदम है। हालांकि, तथ्य यह है कि मेरे वास्तविक डेटा सेट बिल्ली द्वारा आदेश नहीं दिया जाता है। क्या आप जानते हैं कि यह उस उदाहरण में कैसे काम करेगा? (कल्पना कीजिए कि मेरे बिल्ली कॉलम में, डीईएफ एबीसी से पहले आता है। लेकिन यह सच है कि मेरे ऑर्डरिंग में डीईएफ मूल्य लगातार हैं इसलिए आप डीईएफ, डीईएफ, एबीसी, एबीसी, डीईएफ को बिल्ली कॉलम में मान के रूप में नहीं देख पाएंगे) – user1582928

+2

@ user1582928 प्रति http://msdn.microsoft.com/en-us/library/ms173825.aspx " उस क्रम को निर्धारित करता है जिसमें विभाजन में पंक्तियों पर DENSE_RANK फ़ंक्शन लागू होता है"। और आप हमेशा चयन के अंत में ऑर्डर जोड़ सकते हैं। – prashanth

+0

@ user1582928, यदि आप चाहते हैं कि आप ऑर्डर बदलने के लिए कोई फ़ंक्शन निर्दिष्ट कर सकें, उदाहरण के लिए: डीकोड ('डीईएफ', 1, 'एबीसी', 2,3) –

31

यहाँ वैकल्पिक समाधान है।

आपको बिल्ली के आदेश के बारे में चिंता करने की आवश्यकता नहीं है। निम्नलिखित एसक्यूएल का उपयोग करके आप अपनी तिथि & बिल्ली संयोजन के लिए अद्वितीय मान प्राप्त कर पाएंगे।

SELECT 
    Date,  
    ROW_NUMBER() OVER (PARTITION BY Date, Cat ORDER By Date, Cat) as ROW, 
    Cat, 
    Qty 
FROM SOURCE 
संबंधित मुद्दे