Oracle में मुख्य क्वेरी में 2 काउंट सबक्वेरीज़ जोड़ने का प्रयास करने पर स्तब्ध हूँ

प्रोग्रामिंग


मैं एक मौजूदा क्वेरी को अपडेट करने का प्रयास कर रहा हूं, जिसमें 2 सबक्वेरी शामिल हैं, जिनमें से प्रत्येक एक अलग गिनती की गणना कर रही है। मुख्य क्वेरी अपने आप ठीक से चलती है और मैं 2 सबक्वेरीज़ को अपने आप चलाने में सक्षम हूं, हालांकि, जब मैं उनसे जुड़ने का प्रयास करता हूं, तो मुझे एक सिंटैक्स त्रुटि “मिसिंग कीवर्ड” मिल रही है।

यहाँ मेरी मुख्य क्वेरी है. यह 3 अलग-अलग तालिकाओं से निरीक्षण डेटा लेता है और हर बार निरीक्षण कार्यक्रम चलाए जाने पर दिखाने के लिए इसे कार्य संख्या के आधार पर सारांशित करता है। निरीक्षण डेटा को सुविधा प्रकार (छेद, ज़ैक्सिस या कोने) के आधार पर विभिन्न तालिकाओं में विभाजित किया गया है। प्रत्येक कार्य संख्या के परिणाम इन 3 तालिकाओं या एकाधिक तालिकाओं में से केवल 1 में पाए जा सकते हैं। इस वजह से, मुख्य क्वेरी में एक MIN फ़ंक्शन होता है, इसलिए मैं प्रति कार्य संख्या में एक प्रविष्टि के साथ समाप्त होता हूं। ध्यान देने वाली एक और बात यह है कि प्रत्येक तालिका में एक ही प्रकार की एक या अधिक जांच विशेषताएं हो सकती हैं, अंतर एक अलग स्थान पर हो सकता है।

एसक्यूएल

SELECT MIN(t.timeofentry) as timeofentry, t.machine, t.tape, t.partnumber, t.spindle, t.jobnumber 
from (
     SELECT timeofentry, machine, tape, partnumber, spindle, jobnumber
      FROM PROBEVALIDATIONHOLE
      WHERE HOLENUMBER = 1 AND TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537'
      UNION
      SELECT timeofentry, machine, tape, partnumber, spindle, jobnumber
      FROM PROBEVALIDATIONZAXIS
      WHERE ZHIT = 1 AND TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537'
      UNION
      SELECT timeofentry, machine, tape, partnumber, spindle, jobnumber
      FROM PROBEVALIDATIONCORNER
      WHERE TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537'
      )t 
      GROUP BY t.machine, t.tape, t.partnumber, t.spindle, t.jobnumber
      ORDER BY timeofentry

यह डेटा लौटाता है जैसे:
टाइमऑफएंट्री, मशीन, टेप, पार्टनंबर, स्पिंडल, जॉबनंबर
01/02/2024 11:13:50 अपराह्न, एनसी-537, 4479, एबीसी, एलएच, 75576
01/02/2024 11:25:50 अपराह्न, एनसी-537, 4479, एबीसी, आरएच, 75577

अब मैं कार्य संख्या के लिए निरीक्षण की गई सुविधाओं की कुल संख्या और उस कार्य संख्या के लिए सहनशीलता से बाहर की सुविधाओं की कुल संख्या दोनों को दिखाने के लिए क्वेरी में 2 गिनती जोड़ना चाहता हूं। कुछ इस तरह:

प्रवेश का समय, मशीन, टेप, पार्टनंबर, स्पिंडल, जॉबनंबर, विफल, कुल
01/02/2024 11:13:50 अपराह्न, एनसी-537, 4479, एबीसी, एलएच, 75576, 0, 4
01/02/2024 11:25:50 अपराह्न, एनसी-537, 4479, एबीसी, आरएच, 75577, 2, 4

यहां प्रत्येक के लिए उपप्रश्न दिए गए हैं। जिस पर विफल सुविधाएँ शामिल हैं, मुझे लगता है कि मुझे कहीं न कहीं COALESCE की आवश्यकता होगी क्योंकि हर कार्य में विफल सुविधाएँ नहीं होती हैं इसलिए कभी-कभी सबक्वेरी शून्य हो सकती है

इसमें विफल सुविधाओं की संख्या शामिल है:

एसक्यूएल

select jobnumber, sum(fails)as TotalFails
from(
select jobnumber, count(*) as fails from probevalidationhole where TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537' and (xoutoftol = 'Yes' or youtoftol = 'Yes') group by jobnumber
union
select jobnumber, count(*) as fails from probevalidationzaxis where TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537' and Zoutoftol = 'Yes' group by jobnumber
union
select jobnumber, count(*) as fails from probevalidationcorner where TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537' and (xoutoftol = 'Yes' or youtoftol = 'Yes') group by jobnumber)
group by jobnumber

इसमें सुविधाओं की कुल संख्या शामिल है:

एसक्यूएल

select jobnumber, sum(features)as TotalFeatures
from(
select jobnumber, count(*) as features from probevalidationhole where TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537' group by jobnumber
union
select jobnumber, count(*) as features from probevalidationzaxis where TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537' group by jobnumber
union
select jobnumber, count(*) as features from probevalidationcorner where TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537' group by jobnumber)
group by jobnumber

मैंने क्या प्रयास किया है:

मैं यही कोशिश कर रहा था जब मुझे सिंटैक्स त्रुटि “मिसिंग कीवर्ड” मिली। मैं बस पहले कुल सुविधाएँ जोड़ने और फिर विफल सुविधाओं को जोड़ने का प्रयास कर रहा था, लेकिन मुझे काम करने के लिए कुल सुविधाएँ नहीं मिल पा रही थीं।

एसक्यूएल

SELECT MIN(t.timeofentry) as timeofentry, t.machine, t.tape, t.partnumber, t.spindle, t.jobnumber, TF.totalfeatures
from (
     SELECT timeofentry, machine, tape, partnumber, spindle, jobnumber
      FROM PROBEVALIDATIONHOLE
      WHERE HOLENUMBER = 1 AND TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537'
      UNION
      SELECT timeofentry, machine, tape, partnumber, spindle, jobnumber
      FROM PROBEVALIDATIONZAXIS
      WHERE ZHIT = 1 AND TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537'
      UNION
      SELECT timeofentry, machine, tape, partnumber, spindle, jobnumber
      FROM PROBEVALIDATIONCORNER
      WHERE TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537'
      )t
      left join
      (select jobnumber, sum(features)as TotalFeatures
      from(
      select jobnumber, count(*) as features from probevalidationhole where TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537' group by jobnumber
      union
      select jobnumber, count(*) as features from probevalidationzaxis where TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537' group by jobnumber
      union
      select jobnumber, count(*) as features from probevalidationcorner where TIMEOFENTRY between '01/01/2024 12:00:00 AM' and '01/12/2024 11:59:59 PM' and Machine = 'NC-537' group by jobnumber)
      group by jobnumber) as TF
      on t.jobnumber = TF.jobnumber
      GROUP BY t.machine, t.tape, t.partnumber, t.spindle, t.jobnumber, tf.totalfeatures
      ORDER BY timeofentry

समाधान 1

मैं यह समझ गया। यह एक मूर्खतापूर्ण टाइपो था. नीचे से चौथी पंक्ति में मेरे पास “टीएफ” था, बस “टीएफ” होना चाहिए था

コメント

タイトルとURLをコピーしました