प्रश्नों को एक साथ रखने के दो तरीके हैं:जॉइन का उपयोग करके और यूनियनों के साथ एक दूसरे के ऊपर। जॉइन का उपयोग करते समय परिणाम में दोनों प्रश्नों के कॉलम शामिल होंगे। यूनियनों का उपयोग करते समय, परिणाम में दोनों प्रश्नों की पंक्तियाँ शामिल होंगी। यूनियनों के काम करने के लिए, दोनों प्रश्नों को समान संख्या में संबंधित कॉलम लौटाने होंगे।
मुझे लगता है कि आप दूसरी क्वेरी में गणना की गई गणना को कॉलम के रूप में पहली क्वेरी में जोड़ना चाहते हैं। यह इस तरह काम करता है (मैं नए 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
उम्मीद की जाएगी।