Thursday, 15 August 2013

pivot - Oracle - Look up for the data in pivoted table -


मेरे पास एक मेज है जिसके पास स्तंभ हैं:
USERID, USERTYPE, विभाजन, SUBDIVISION

प्रत्येक यूजरआड के लिए, एक या अधिक यूज़रटेप्स होंगे (जैसे उपयोगकर्ता एक डेवलपर या एडमिनिस्ट्रेटर या दोनों हो सकता है) यूज़रटेप्स के आधार पर उपयोगकर्ता को डिवीजनों और वैकल्पिक रूप से इसके उप-विभाजनों के लिए सब्सक्राइब किया जा सकता है।
यूजरआईडी, यूएनटीपीई और डिवीजन रिक्त कॉलम नहीं हैं।

आउटपुट को निम्नलिखित प्रारूप में जरूरी है -
< / P>

  1. USERID, USERTYPE, DIVISION1, DIVISION2, DIVISION3 .. और इतने पर
    इसलिए, USERID-USERTYPE के संयोजन के लिए एक अद्वितीय रिकॉर्ड होना चाहिए इसके लिए मैंने पिवोट ऑपरेटर का इस्तेमाल किया है जो ठीक काम करता है। मैंने इस क्वेरी के इस परिणाम को स्टोर करने के लिए एक अस्थायी तालिका भी बनाई है (चलो टेबल 1 कहें)।
  2. अब, यदि उपयोगकर्ता उपखंडों में सदस्यता लेता है, तो उपविभागों के मूल्यों को उस विभाजन के तहत अल्पविराम से विभाजित मूल्यों के रूप में लिखा जाना चाहिए। यदि यह उप-विभाजनों का सदस्य नहीं है, तो साधारण विभाजन उसके संबंधित कॉलम के तहत दिखाई देंगे।
    मैंने LISTAGG फ़ंक्शन का उपयोग करते हुए एक क्वेरी लिखा है, जो मुझे प्रत्येक उपयोगकर्ता आईडी-USERTYPE संयोजन के लिए अल्पविराम से अलग उप-विभाजन देता है। इस क्वेरी का परिणाम तालिका 2 में संग्रहीत है।

    अब जब मैं USERID और USERTYPE पर तालिका 1 और तालिका 2 में शामिल होने के लिए, मुझे एक एकल USERID-USERTYPE संयोजन के लिए कई पंक्ति मिलती है, जो स्पष्ट है लेकिन इसकी आवश्यकता नहीं है। < / P>

    यहां कुछ नमूना डेटा है:

    नमूना डेटा


    कृपया USERID = 3 के लिए रिकॉर्ड्स पर ध्यान दें। जो मुझे मिल रहा है "में शामिल होने के परिणाम" और "मुझे अंतिम परिणाम" में क्या चाहिए। इसके अलावा, मैं पिवट क्वेरी से पहले LISTAGG का उपयोग नहीं कर सकता, क्योंकि पिव्ॉट क्वेरी के निर्माण के बाद में बाद में सभी उपनिवेशों के सभी संभावित संयोजनों को सूचीबद्ध करने के लिए यह बहुत थकाऊ होगा।

    मुझे यकीन है कि मुझे यहां कुछ छोटी बात याद आ रही है, लेकिन ये पता नहीं लगा सकते कि क्या है।
    कोई सुझाव या संकेतपत्र बहुत मददगार होंगे।
    अग्रिम धन्यवाद।

    वहां पिवट क्वेरी में सभी उपविभागों को सूचीबद्ध करने की कोई आवश्यकता नहीं है, बस इसे USERID, USERTYPE, DIVISION के अद्वितीय संयोजनों के समूह में एकत्र करें और nvl (AGGREGATED_VALUE, DIVISION) का उपयोग करें प्राप्त करें पिवोट तालिका भरने के लिए एक मान।

    अगर source_table USERID, USERTYPE, DIVISION, SUBDIVISION कॉलम के साथ एक तालिका है, जिसका आपने पहले अपने प्रश्न का उल्लेख किया है, तो यह उदाहरण आपके लिए काम करना होगा:

      से चुनें * से (चयन करें userid, usertype, division, - पिवट nvl (listagg (subdivision, ',') समूह के भीतर (आदेश) के लिए तैयार मूल्य प्राप्त करें ('Div1', 'div2')) में डिवीजन के लिए धुरी (अधिकतम (subdiv_list)) उप-विभाजित करके), डिवीजन) source_table समूह से userid, usertype, डिवीजन द्वारा subdiv_list)   

    पी एस बस एक पक्ष की कहानी के रूप में, कॉलमों की एक सूची की गतिशील रूप से उपयोगी हो सकती है जांचें।

No comments:

Post a Comment