प्रभावी ढंग से विशिष्ट रिकॉर्ड्स को पिवोट करना
पिवोट क्वेरीज़ डेटा को सारणीबद्ध प्रारूप में बदलने में महत्वपूर्ण भूमिका निभाती हैं, जिससे डेटा विश्लेषण आसान हो जाता है। हालाँकि, अलग-अलग रिकॉर्ड के साथ काम करते समय, धुरी प्रश्नों का डिफ़ॉल्ट व्यवहार समस्याग्रस्त हो सकता है।
समस्या: विशिष्ट मानों को अनदेखा करना
निम्न तालिका पर विचार करें:
------------------------------------------------------ | Id Code percentage name name1 activity | ----------------------------------------------------- | 1 Prashant 43.43 James James_ Running | | 1 Prashant 70.43 Sam Sam_ Cooking | | 1 Prashant 90.34 Lisa Lisa_ Walking | | 1 Prashant 0.00 James James_ Stealing | | 1 Prashant 0.00 James James_ Lacking | | 1 Prashant 73 Sam Sam_ Cooking 1 | ------------------------------------------------------
एक पारंपरिक धुरी क्वेरी, जैसे:
SELECT Id,Code, MAX(CASE WHEN name = 'James' THEN activity END) AS James, MAX(CASE WHEN name1 = 'James_' THEN percentage END) AS James_, MAX(CASE WHEN name = 'Sam' THEN activity END) AS Sam, MAX(CASE WHEN name1 = 'Sam_' THEN percentage END) AS Sam_, MAX(CASE WHEN name = 'Lisa' THEN activity END) AS Lisa, MAX(CASE WHEN name1 = 'Lisa_' THEN percentage END) AS Lisa_ FROM A GROUP BY Id, Code
परिणाम निम्न तालिका में होगा:
------------------------------------------------------------------- Id Code James James_ Sam Sam_ Lisa Lisa_ ------------------------------------------------------------------- 1 Prashant Running 43.43 Cooking 3.43 Walking 90.34 1 Prashant Stealing 0.0 NULL NULL NULL NULL -------------------------------------------------------------------
यहाँ मुद्दा यह है कि जब नाम दोहराया जाता है और प्रतिशत 0 होता है, तो धुरी क्वेरी नाम 1 के लिए अलग-अलग मानों को अनदेखा कर देती है। इस मामले में, जेम्स के लिए "कमी" गतिविधि खो गई है।
समाधान: सटीकता के लिए ROW_NUMBER() का उपयोग करना
इसे संबोधित करने के लिए, हम परिचय दे सकते हैं ROW_NUMBER():
;with cte as ( select *, ROW_NUMBER() over (partition by name order by percentage desc) ROWNUM from A ) ...
ROW_NUMBER() का उपयोग करके, हम नाम के आधार पर डेटा को विभाजित करते हैं और प्रत्येक पंक्ति को उस विभाजन के भीतर एक अद्वितीय संख्या निर्दिष्ट करते हैं। यह हमें नाम दोहराए जाने पर भी गतिविधियों और प्रतिशत के बीच संबंध बनाए रखने की अनुमति देता है।
परिणाम तालिका होगी:
---------------------------------------------------------- | Id Code James James_ Sam Sam_ Lisa Lisa_ ---------------------------------------------------------- | 1 Prashant Running 43.43 Cooking 1 73 Walking 90.34 | 1 Prashant Stealing 0.00 Cooking 3.43 NULL NULL | 1 Prashant Lacking 0.00 NULL NULL NULL NULL ----------------------------------------------------------
जेम्स के लिए "लाकिंग" सहित सभी गतिविधियां अब धुरी तालिका में दर्शाई गई हैं। यह तकनीक सुनिश्चित करती है कि अलग-अलग मान संरक्षित रहें, विश्लेषण के लिए सटीक डेटा प्रदान करें।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3