Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

ओरेकल एसक्यूएल में एक परिणाम के रूप में दो अलग-अलग प्रश्नों का आउटपुट

प्रश्नों को एक साथ रखने के दो तरीके हैं:जॉइन का उपयोग करके और यूनियनों के साथ एक दूसरे के ऊपर। जॉइन का उपयोग करते समय परिणाम में दोनों प्रश्नों के कॉलम शामिल होंगे। यूनियनों का उपयोग करते समय, परिणाम में दोनों प्रश्नों की पंक्तियाँ शामिल होंगी। यूनियनों के काम करने के लिए, दोनों प्रश्नों को समान संख्या में संबंधित कॉलम लौटाने होंगे।

मुझे लगता है कि आप दूसरी क्वेरी में गणना की गई गणना को कॉलम के रूप में पहली क्वेरी में जोड़ना चाहते हैं। यह इस तरह काम करता है (मैं नए JOIN का उपयोग कर रहा हूं सिंटैक्स):

SELECT
    q1.x, q1.y, q2.z, ...
FROM
    (SELECT ... FROM ...) q1
    LEFT JOIN
    (SELECT ... FROM ...) q2
        ON q1.column = q2.column

आप INNER JOIN . का भी उपयोग कर सकते हैं इसके बजाय LEFT JOIN यदि आप जानते हैं कि query2 क्वेरी1 की प्रत्येक पंक्ति के लिए कम से कम एक पंक्ति उत्पन्न करता है या यदि आप query1 की पंक्तियों में रुचि नहीं रखते हैं, जहां क्वेरी 2 से संबंधित पंक्तियाँ गायब हैं।

SELECT 
    q1.message_type,
    q1.queue_seqnum,
    q1.files,
    q2.message_count
FROM (SELECT
         a.message_type,
         a.queue_seqnum,
         SUBSTR(b.char_data, 1, 2) files
      FROM
         ad_in_messageheader a,
         INNER JOIN ad_in_messagedetail b
            ON  a.queue_seqnum = b.queue_seqnum 
      WHERE
         a.message_type IN ('ERP_COSTS_SMRY', 'ERP_SALES_SMRY', 'ERP_SPEND_SMRY') AND
         a.create_time > '17-DEC-13 07.00.00 AM') q1
   LEFT JOIN
     (SELECT
         a.message_type,
         COUNT(a.message_type) message_count
      FROM
         ad_in_messageheader a 
      WHERE
         a.message_type IN ('ERP_COSTS', 'ERP_SALES', 'ERP_SPEND') AND
         create_time > '17-DEC-13 07.00.00 AM'
      GROUP BY
         a.message_type) q2
   ON q1.message_type = q2.message_type
ORDER BY
   q1.queue_seqnum DESC;

मैं दो उप प्रश्नों में शामिल होने के बाद छँटाई भी करूँगा, क्योंकि जुड़ने की प्रक्रिया पहले स्थापित किसी भी आदेश को नष्ट कर सकती है।

संदेश प्रकारों के साथ भी एक समस्या है:आप दो उप प्रश्नों में समान संदेश प्रकारों का चयन नहीं कर रहे हैं। ORACLE में, आप DECODE . का उपयोग कर सकते हैं संदेश प्रकारों का मिलान करने के लिए उनका अनुवाद करने के लिए कार्य करें

उप क्वेरी 1 में:

SELECT
    DECODE(a.message_type,
           'ERP_COSTS_SMRY', 'ERP_COSTS', 
           'ERP_SALES_SMRY', 'ERP_SALES',
           'ERP_SPEND_SMRY', 'ERP_SPEND') message_type

अगर create_time एक DATE है कॉलम, आपको दिनांक/समय स्ट्रिंग को दिनांक में बदलना होगा।

WHERE
    a.create_time > TO_DATE('17-12-2013 19:00:00', 'DD-MM-YYYY HH24:MI:SS')

(देखें https://stackoverflow.com/a/10178346/880990 )

यदि संभव हो तो चार अंकों के वर्ष का भी उपयोग करें। यह अधिक सुरक्षित है। क्या 31 है 1931 या 2031 ? साथ ही, एक महीने का नंबर अलग-अलग लोकेशंस वाले सिस्टम पर भी काम करेगा। DEC जर्मन प्रणाली पर मान्यता प्राप्त नहीं होगी। इसके बजाय DEZ उम्मीद की जाएगी।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. प्राथमिक कुंजी के लिए Oracle के SYS_GUID () का उपयोग करने के लिए हाइबरनेट को कॉन्फ़िगर करें

  2. TO_YMINTERVAL () Oracle में फ़ंक्शन

  3. Oracle में दो टाइमस्टैम्प के बीच अंतर की गणना कैसे करें

  4. SQL डेवलपर में नया कनेक्शन जोड़ते समय Oracle TNS नाम प्रदर्शित नहीं हो रहे हैं

  5. PLS-00221:'C1'(कर्सर) एक प्रक्रिया नहीं है या अपरिभाषित है