Perplexe à l’idée d’essayer d’ajouter 2 sous-requêtes à la requête principale dans Oracle

la programmation


J’essaie de mettre à jour une requête existante pour inclure 2 sous-requêtes calculant chacune un nombre différent. La requête principale fonctionne correctement toute seule et j’ai pu faire exécuter les 2 sous-requêtes seules. Cependant, lorsque j’essaie de les rejoindre, j’obtiens une erreur de syntaxe “mot clé manquant”.

Voici ma requête principale. Il prend les données d’inspection de 3 tableaux distincts et les résume par numéro de travail pour les afficher à chaque exécution du programme d’inspection. Les données d’inspection sont réparties dans différents tableaux en fonction du type de fonction (trous, axe z ou coin). Les résultats pour chaque numéro d’emploi peuvent être trouvés dans seulement 1 de ces 3 tableaux ou dans plusieurs tableaux. Pour cette raison, c’est pourquoi il y a une fonction MIN dans la requête principale, donc je me retrouve avec une entrée par numéro de travail. Une autre chose à noter est que chaque table peut alors avoir une ou plusieurs fonctionnalités de sonde du même type, la différence étant située à un emplacement différent.

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

Cela renvoie des données telles que :
Heure d’entrée, machine, bande, numéro de pièce, broche, numéro de travail
02/01/2024 23:13:50, NC-537, 4479, ABC, LH, 75576
02/01/2024 23:25:50, NC-537, 4479, ABC, RH, 75577

Je souhaite maintenant ajouter 2 comptes à la requête pour afficher à la fois le nombre total d’entités inspectées pour le numéro de tâche et le nombre total d’entités hors tolérance pour ce numéro de tâche. Quelque chose comme ça:

Heure d’entrée, machine, bande, numéro de pièce, broche, numéro de travail, échec, total
02/01/2024 23:13:50, NC-537, 4479, ABC, LH, 75576, 0, 4
02/01/2024 23:25:50, NC-537, 4479, ABC, RH, 75577, 2, 4

Voici les sous-requêtes pour chacune. Sur celui qui inclut les fonctionnalités défaillantes, je pense que j’aurai besoin d’un COALESCE quelque part car tous les travaux n’ont pas échoué, donc la sous-requête peut parfois renvoyer null.

Celui-ci inclut le nombre de fonctionnalités défaillantes :

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

Celui-ci comprend le nombre total de fonctionnalités :

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

Ce que j’ai essayé :

Voici ce que j’essayais lorsque j’ai eu l’erreur de syntaxe “mot clé manquant”. J’essayais simplement d’ajouter d’abord le total des fonctionnalités, puis de faire les fonctionnalités qui ont échoué, mais je n’arrive pas à faire fonctionner uniquement le total des fonctionnalités.

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

Solution 1

Je l’ai compris. C’était une faute de frappe stupide. Sur la 4ème ligne en partant du bas, j’avais “as TF”, j’aurais dû juste être “TF”

コメント

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