تعثرت عند محاولة إضافة عدد 2 من الاستعلامات الفرعية إلى الاستعلام الرئيسي في Oracle

برمجة


أحاول تحديث استعلام موجود ليشمل استعلامين فرعيين يحسب كل منهما عددًا مختلفًا. يعمل الاستعلام الرئيسي بشكل جيد من تلقاء نفسه وقد تمكنت من تشغيل الاستعلامين الفرعيين بمفردهما، ومع ذلك، عندما أحاول الانضمام إليهما، يظهر لي خطأ في بناء الجملة “كلمة رئيسية مفقودة”.

هنا هو استفساري الرئيسي. يأخذ بيانات الفحص من 3 جداول منفصلة ويلخصها برقم المهمة لإظهار كل مرة تم فيها تشغيل برنامج الفحص. يتم تقسيم بيانات الفحص إلى جداول مختلفة بناءً على نوع الميزة (الثقوب أو المحور أو الزاوية). يمكن العثور على نتائج كل رقم وظيفة في جدول واحد فقط من هذه الجداول الثلاثة أو جداول متعددة. ولهذا السبب، هناك دالة MIN في الاستعلام الرئيسي، لذلك ينتهي بي الأمر بإدخال واحد لكل رقم مهمة. شيء آخر يجب ملاحظته هو أن كل جدول يمكن أن يحتوي على ميزة مسبار واحدة أو أكثر من نفس النوع مع وجود الاختلاف في موقع مختلف.

SQL

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 مساءً, NC-537, 4479, ABC, LH, 75576
01/02/2024 11:25:50 م, NC-537, 4479, ABC, RH, 75577

أريد الآن إضافة عددين إلى الاستعلام لإظهار إجمالي عدد الميزات التي تم فحصها لرقم الوظيفة وإجمالي عدد الميزات التي كانت خارج نطاق التسامح مع رقم الوظيفة هذا. شيء من هذا القبيل:

وقت الدخول، الآلة، الشريط، رقم القطعة، المغزل، رقم الوظيفة، الفاشل، الإجمالي
01/02/2024 11:13:50 م, NC-537, 4479, ABC, LH, 75576, 0, 4
01/02/2024 11:25:50 م, NC-537, 4479, ABC, RH, 75577, 2, 4

فيما يلي الاستعلامات الفرعية لكل منها. فيما يتعلق بالوظيفة التي تتضمن الميزات الفاشلة، أعتقد أنني سأحتاج إلى COALESCE هناك في مكان ما حيث لا تحتوي كل مهمة على ميزات فاشلة لذا قد يعود الاستعلام الفرعي فارغًا في بعض الأحيان

يتضمن هذا عددًا من الميزات الفاشلة:

SQL

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

يتضمن هذا العدد الإجمالي للميزات:

SQL

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

ما حاولت:

هذا ما كنت أحاوله عندما تلقيت خطأ في بناء الجملة “كلمة رئيسية مفقودة”. كنت أحاول فقط إضافة إجمالي الميزات أولاً ثم القيام بالميزات الفاشلة ولكن لا يبدو أنني أتمكن من تشغيل إجمالي الميزات فقط.

SQL

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

اكتشفتها. لقد كان خطأ مطبعي غبي. في السطر الرابع من الأسفل كان لدي “باسم TF”، وكان ينبغي أن يكون مجرد “TF”

コメント

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