Pb de résultat dans une requete qui utilise des sous-select
bouffon de service
-
bouffon de service -
bouffon de service -
Bonjour à tous,
Je travaille sous Oracle 10
Je souhaite extraire pour chaque secteurs la somme des Tps des préventifs 'Fait' et 'à faire' dans une palge de dates
Lorsque je lance la requête ci-dessous:
il m'affiche un message d'erreur suivant:
j'enlève dans la jointure ( and B.cd_ws = C.cd_ws )le "B." et que je relance celle-ci,
il m'affiche un autre message d'erreur mais pour la ligne de dessus.
j'enlève dans la jointure ( and A.cd_ws = C.cd_ws )le "A." et que je relance la requete,
celle-ci s'exécute et affiche un résultat au bout de 1:20 minutes avec 1 950 614 lignes.
Je ne devrais avoir q'une dizaine de lignes en tout.
Question: La structure de la requete de base est elle correcte ?
Ou est-je commis le ou les erreurs d'écriture ?
Merci pour votre aide. Slts.
Je travaille sous Oracle 10
Je souhaite extraire pour chaque secteurs la somme des Tps des préventifs 'Fait' et 'à faire' dans une palge de dates
Lorsque je lance la requête ci-dessous:
select substr(C.cd_box2,1, 10) Secteurs, Tps_prévu_a_faire, Tps_fait from ( select cd_box2, sum(tm_Fcast_tech_modi) Tps_prévu_a_faire from WS where cd_action_type ='PREV' and cd_wows_status ='3' and dt_ws_begin >= to_date('01032013','DDMMYYYY') and dt_ws_begin <= to_date('31032013','DDMMYYYY') group by cd_box2 )A, ( select cd_box2, sum(tm_Fcast_tech_modi) Tps_fait from WS where cd_action_type ='PREV' and cd_wows_status ='6' and dt_ws_begin >= to_date('01032013','DDMMYYYY') and dt_ws_begin <= to_date('31032013','DDMMYYYY') group by cd_box2 )B, WS C where A.cd_ws = C.cd_ws and B.cd_ws = C.cd_ws and C.cd_box2 not like '%null%' order by 1
il m'affiche un message d'erreur suivant:
ORA-00904: "B"."CD_WS": invalid identifier
j'enlève dans la jointure ( and B.cd_ws = C.cd_ws )le "B." et que je relance celle-ci,
il m'affiche un autre message d'erreur mais pour la ligne de dessus.
ORA-00904: "A"."CD_WS": invalid identifier
j'enlève dans la jointure ( and A.cd_ws = C.cd_ws )le "A." et que je relance la requete,
celle-ci s'exécute et affiche un résultat au bout de 1:20 minutes avec 1 950 614 lignes.
Je ne devrais avoir q'une dizaine de lignes en tout.
Question: La structure de la requete de base est elle correcte ?
Ou est-je commis le ou les erreurs d'écriture ?
Merci pour votre aide. Slts.
A voir également:
- Pb de résultat dans une requete qui utilise des sous-select
- Resultat foot - Télécharger - Vie quotidienne
- Qui utilise mon wifi - Guide
- Salut j'utilise whatsapp - Accueil - Messagerie instantanée
- Lexer resultat - Télécharger - Sport
- Une personne non-voyante utilise un logiciel qui lit les textes et décrit les images. sans utiliser de logiciel spécifique, trouvez, dans le document, comment s’appelle le chien de la photo - Forum CSS
6 réponses
Bonjour
Je ne comprends pas dans ta requête ce que signifie A.cd_ws : La sous requête A renvoie A.cd_box2 et A.Tps_prévu_a_faire, mais aucun A.cd_ws. Idem pour B.cd_ws.
Tu n'aurais pas oublié d' ajouter le champ cd_ws dans tes sous-requêtes ?
Je ne comprends pas dans ta requête ce que signifie A.cd_ws : La sous requête A renvoie A.cd_box2 et A.Tps_prévu_a_faire, mais aucun A.cd_ws. Idem pour B.cd_ws.
Tu n'aurais pas oublié d' ajouter le champ cd_ws dans tes sous-requêtes ?
select substr(C.cd_box2,1, 10) Secteurs, Tps_prévu_a_faire, Tps_fait from ( select cd_ws,cd_box2, sum(tm_Fcast_tech_modi) Tps_prévu_a_faire from WS where cd_action_type ='PREV' and cd_wows_status ='3' and dt_ws_begin >= to_date('01032013','DDMMYYYY') and dt_ws_begin <= to_date('31032013','DDMMYYYY') group by cd_box2 )A, ( select cd_ws, cd_box2, sum(tm_Fcast_tech_modi) Tps_fait from WS where cd_action_type ='PREV' and cd_wows_status ='6' and dt_ws_begin >= to_date('01032013','DDMMYYYY') and dt_ws_begin <= to_date('31032013','DDMMYYYY') group by cd_box2 )B, WS C where A.cd_ws = C.cd_ws and B.cd_ws = C.cd_ws and C.cd_box2 not like '%null%' order by 1
Bonjour, Le père
De mon point de vue , non. Il n'est pas nécessaire de rajouter le CD_WS.
Les données que je veux extraire sont dans une seule table.
Il est possible que l'écriture des jointures dans le WHERE ne soient pas correct.
Il est fort possible que j'ai comis une erreur d'écriture à ce niveau là, mais je
ne voit pas ou ???
Quand je lance une des 2 sous-requêtes seule , j'ai les bonnes données qui apparaissent.
De mon point de vue , non. Il n'est pas nécessaire de rajouter le CD_WS.
Les données que je veux extraire sont dans une seule table.
Il est possible que l'écriture des jointures dans le WHERE ne soient pas correct.
Il est fort possible que j'ai comis une erreur d'écriture à ce niveau là, mais je
ne voit pas ou ???
Quand je lance une des 2 sous-requêtes seule , j'ai les bonnes données qui apparaissent.
select cd_box2, sum(tm_Fcast_tech_modi) Tps_fait from WS where cd_action_type ='PREV' and cd_wows_status ='6' and dt_ws_begin >= to_date('01032013','DDMMYYYY') and dt_ws_begin <= to_date('31032013','DDMMYYYY') group by cd_box2 order by 1
CD_BOX2 TPS_FAIT -------------------- ---------- BOBINAGE... 483333 CAGE._50 1658333 COMMUN..AU..J 200000 FIN...50 741665 J..2 150000 J..4 625000 LF._J4 533332 LF._LS-40 166666 LF._LT-60 499998 LS40 1058331 LT60 2116666
De mon point de vue , non
As-tu essayé ?
Maintenant que j'ai essayé ce qui me semblait évident, je peux te le confirmer : il y a bien un problème à ce niveau-là. Je ne dis pas que c'est le seul.
Les données que je veux extraire sont dans une seule table
OSEF. Quand tu écris B.cd_ws, tu dis explicitement : "le champ cd_ws de la sous-requête B". Or la sous-requête B N'A PAS de champ cd_ws. Et c'est bien là-dessus que porte ton message d'erreur.
As-tu essayé ?
Maintenant que j'ai essayé ce qui me semblait évident, je peux te le confirmer : il y a bien un problème à ce niveau-là. Je ne dis pas que c'est le seul.
Les données que je veux extraire sont dans une seule table
OSEF. Quand tu écris B.cd_ws, tu dis explicitement : "le champ cd_ws de la sous-requête B". Or la sous-requête B N'A PAS de champ cd_ws. Et c'est bien là-dessus que porte ton message d'erreur.
Re-Bjr, le père
Oui , j'ai essayé. Cela ne m'apporte rien de plus.
Si je suis ton résonnement , je lance les sous-requêtes en rajoutant de CD_WS dans le select
voilà ce que cela donne comme résultat:
idem pour l'autre requête :
Cela ne m'apporte rien de plus, juste une colonne en plus.
Oui , j'ai essayé. Cela ne m'apporte rien de plus.
Si je suis ton résonnement , je lance les sous-requêtes en rajoutant de CD_WS dans le select
select cd_box2, cd_ws, sum(tm_Fcast_tech_modi) Tps_prévu_a_faire from WS where cd_action_type ='PREV' and cd_wows_status ='6' and dt_ws_begin >= to_date('01032013','DDMMYYYY') and dt_ws_begin <= to_date('31032013','DDMMYYYY') group by cd_box2, cd_ws order by 1
voilà ce que cela donne comme résultat:
CD_BOX2 CD_WS TPS_PRÉVU_A_FAIRE -------------------- ---------- ----------------- BOBINAGE... 1 483333 CAGE._50 1 1658333 COMMUN..AU..J 1 200000 FIN...50 1 741665 J..2 1 150000 J..4 1 625000 LF._J4 1 533332 LF._LS-40 1 166666 LF._LT-60 1 499998 LS40 1 1058331 LT60 1 2116666 CD_BOX2 CD_WS TPS_PRÉVU_A_FAIRE -------------------- ---------- ----------------- MDA. 1 475000 MOBB_ 1 358332 QT40. 1 183333 S/E._50 1 1308333 SOMFY_ 1 75000 ST50_ 1 600000 SUP_CTRL. 1 50000
idem pour l'autre requête :
select cd_box2, cd_ws, sum(tm_Fcast_tech_modi) Tps_prévu_a_faire from WS where cd_action_type ='PREV' and cd_wows_status ='3' and dt_ws_begin >= to_date('01032013','DDMMYYYY') and dt_ws_begin <= to_date('31032013','DDMMYYYY') group by cd_box2, cd_ws order by 1
CD_BOX2 CD_WS TPS_PRÉVU_A_FAIRE -------------------- ---------- ----------------- BOBINAGE... 1 2475000 CAGE._50 1 616666 LF._MOBB/MDA 1 150000 MDA. 1 175000
Cela ne m'apporte rien de plus, juste une colonne en plus.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Tu n'as pas suivi mon raisonnement.
Quand tu lances une sous-requête individuellement, ce n'est plus une sous-requête, ça devient une requête. Ça n'a plus aucun rapport et d'ailleurs tu n'as pas de message d'erreur.
Je te parle d'essayer la requête complète, celle que tu donnais dans ta question initiale.
Tu demandais si tu avais commis une erreur d'écriture et si oui, où. Je t'ai répondu et je t'ai montré où.
Je ne parle que du message d'erreur que tu avais, la logique de la requête est un autre problème.
As-tu toujours le même message d' erreur
avec la requête que je t'avais donnée là ?
Quand tu lances une sous-requête individuellement, ce n'est plus une sous-requête, ça devient une requête. Ça n'a plus aucun rapport et d'ailleurs tu n'as pas de message d'erreur.
Je te parle d'essayer la requête complète, celle que tu donnais dans ta question initiale.
Tu demandais si tu avais commis une erreur d'écriture et si oui, où. Je t'ai répondu et je t'ai montré où.
Je ne parle que du message d'erreur que tu avais, la logique de la requête est un autre problème.
As-tu toujours le même message d' erreur
ORA-00904: "B"."CD_WS": invalid identifier
avec la requête que je t'avais donnée là ?
Re-Bjr, le père
J'ai lancé la rqte complète (celle ou tu mis le CD_WS ). il ma affiché le message d'erreur suivant :
Je pense que c'est normal.
J'ai rajouté dans les GROUP BY des 2 sous-select le champ CD_WS.
J'ai relancé la requête à 12h24 .
Maintenant, il est 12h50 et elle pédale toujours. elle n'affiche aucun message d'erreur.
J'ai lancé la rqte complète (celle ou tu mis le CD_WS ). il ma affiché le message d'erreur suivant :
ORA-00979: not a GROUP BY expression
Je pense que c'est normal.
J'ai rajouté dans les GROUP BY des 2 sous-select le champ CD_WS.
J'ai relancé la requête à 12h24 .
Maintenant, il est 12h50 et elle pédale toujours. elle n'affiche aucun message d'erreur.