|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() Inscription : novembre 2007 Messages : 226 ![]() |
* Bonjour, *
J'ai un problème avec une requête SQL qui doit me retourner la quantité reste à livrer pour une commande bien déterminée. La solution est : 1- Une requête qui retourne les articles+ quantité reste à livrer pour une commande, UNION 2- Une requête qui retourne les articles+ quantité pas encore livrés Après le test ça ne répond plus au besoin. Les tables sont: 1) Commande(num_commande, date_commande, #ref_fournisseur) 2) Article(reference, designation) 3) CDE_ART(num_commande,reference,quantite) 4) LIVRAISON(code_livraison, date_liv, # n_comm) 5)LIV_ART(code_livraison, reference, quantite_livree, q_rest_liv) La requête utilisée est la suivante: Code :
|
||
|
|
00
|
|
|
#2 | |||
![]() ![]() |
Citation:
"quantité reste à livrer" et "quantité pas encore livrée", dans mon français, ça veut dire la même chose ! quantité reste à livrée = quantité commandée - quantité livrée Ce n'est pas avec une requête union que tu vas obtenir ce résultat ! Code :
1) num_commande, reference et code_livraison, s'il sont de type alphanumérique sont de mauvaises clés pour les tables. Idem pour ref_fournisseur. 2) q_rest_liv ne devrait pas figurer dans LIV_ART puisque ça peut être calculé. 3) La syntaxe normalisée depuis 1992 pour les jointures utilise l'opérateur JOIN.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|||
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : novembre 2007 Messages : 226 ![]() |
Bonjour;
la 1) c'est pour retourner les articles livrées mais pas complet et 2) c'est pour retourner les articles ne figurant pas dans la table liv_art. comme vous disez le num_commande et reference sont des alphanumériques. Votre solution me donne juste -quantité (commandée). le problème dans ma requête est qu'elle retourne même une quantité = à 0 or je veux juste les articles qui ont un manque de quantité et cela pour une commande bien déterminée. ( un article peut être livrer deux fois par exemple : aujourd'hui 3 et demain 5 pour une quantité commandée de 8). |
|
|
00
|
|
|
#4 | |||
![]() ![]() |
Voilà encore une phrase qui manque de sens !
Ma requête est sensée donnée pour chaque référence d'article de la commande numéro 4 la quantité commandée moins la somme des quantités livrées, c'est à dire le reste à livrer de chaque article de la commande 4. Citation:
Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|||
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : novembre 2007 Messages : 226 ![]() |
Merci pour vos réponses,
Prendre cet exemple s'il vous plait et vous pouvez me comprendre: num_commande= 1, contient 2 articles de reference 1 et 2 et ayant les quantités commandées suivantes 20 et 10. le premier bon de livraison: reference 1, quantité_livrée 15 reste 5 reference 2, quantité_livrée 3 reste 7, votre requête donne : reference 1, reste_a_livrer 2 !!!!! |
|
|
00
|
|
|
#6 | ||||||||
![]() ![]() |
Effectivement, j'étais allé un peu trop vite à cause de la structure de la BDD qui n'est pas très normale.
Qu'est-ce qui a été commandé sur la commande 1 : Code :
Code :
Code :
Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||||||||
|
00
|
|
|
#7 |
|
Membre du Club
![]() Inscription : novembre 2007 Messages : 226 ![]() |
Merci Mr. CinePhil,
ça marche parfaitement, mais pour avoir une résultat complète il faut ajouter ma deuxième instruction UNION pour afficher même les articles non encore livrés. Autre demande si ne vous dérange plus, je veux afficher pour une commande son fournisseur(libelle_fournisseur). |
|
|
00
|
|
|
#8 | ||||||||
![]() ![]() |
Citation:
Avec le LEFT JOIN, tu devrais avoir tous les articles commandés, même ceux qui n'ont pas été commencés de livrer. Là où ça peut coincer (je n'ai pas testé), c'est que dans ce cas là, SUM(t2.quantite_livree) sera à NULL et l'opération retournera probablement NULL également. Il faut alors utiliser COALESCE pour contrer ce NULL. Code :
SELECT t1.reference, t1.qte_commandee - COALESCE(SUM(t2.quantite_livree), 0) AS reste_a_livrer 1) Manière simple à traiter par le logiciel qui lance la requête et affiche le résultat Ajouter la quantité commandée en colonne du SELECT et le logiciel se charge de comparer le reste à livrer à la quantité commandée : Code :
Utiliser un CASE et faire afficher en clair par le SGBD l'état de la ligne de commande Code :
Citation:
Tu ajoutes la colonne ref_fournisseur dans le SELECT et tu fais une jointure avec la table commande dans la première sous-requête : Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||||||||
|
00
|
|
|
#9 |
|
Membre du Club
![]() Inscription : novembre 2007 Messages : 226 ![]() |
Bonjour Mr. CinePhil,
Excusez moi si je vous dérange. Votre dernière requête je l'ai testé sous PLSQL developer et il m'affiche un erreur à propos le ref_fournisseur. Je suis coincé vraiment. Pour plus de clarté: je vais utiliser cette requête sous Report Builder pour m'afficher un état, donc j'ai besoin du numéro de commande, date de la commande et le fournisseur de cette commande, les references et les désignations des articles non complètement livrés y compris les articles non encore livrés ( je dis ça car j'ai testé avec votre requête et ça m'affiche que ceux qui ont une quantité restante à livrer). Excusez moi de nouveau. Merci |
|
|
00
|
|
|
#10 | ||||
![]() ![]() |
C'est Oracle ça non ?
Citation:
Tu as essayé de comprendre le sens de cette erreur ? Citation:
Citation:
Citation:
Conformément aux règles du forum, il faudrait la description exacte des tables, un petit jeu de données et le résultat attendu.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||||
|
00
|
|
|
#11 |
|
Membre du Club
![]() Inscription : novembre 2007 Messages : 226 ![]() |
Encore pardon.
Je dois répéter la structure de ma BD: 1) Fournisseur(reference_four, libelle_four) 2) Commande(num_commande, date_commande, #reference_four) 3) Article(reference, designation) 4) CDE_ART(num_commande,reference,quantite) 5) LIVRAISON(code_livraison, date_livraison, #num_commande) 6) LIV_ART(code_livraison, reference, quantite_livree, q_rest_liv). J'ai besoin de : 1) numéro de commande, date de la commande, 2) le fournisseur de cette commande, 3) les références et les désignations des articles non complètement livrés y compris les articles non encore livrés. 4) enfin pour chaque article, la quantité commandée et la quantité reste à livrer. La dernière requête où vous utilisez le ref_fournisseur. Comme jeu de test si vous voulez on va suivre cet exemple: num_commande= 1, contient 2 articles de référence 1 et 2 et ayant les quantités commandées suivantes 20 et 10. le premier bon de livraison contient : référence 1, quantité_livrée 15 référence 2, quantité_livrée 3. on va tout d'abord ajouter seulement le premier article dans la base et voir le résultat. Excusez moi s'il vous plait je suis coincé. |
|
|
00
|
|
|
#12 |
![]() ![]() |
Tu cherches de ton côté quand même ? Je ne vais pas faire tout ton boulot non plus !
C'est quoi le message d'erreur à propos de ref_fournisseur ? Et quand je demandais la description exacte, je parlais des ordres CREATE TABLE. Quand tu écris la colonne #ref_fournisseur, le # fait partie du nom ou, comme c'est souvent le cas, est juste là pour indiquer que c'est une clé étrangère ? Pas trop le temps de regarder ton truc maintenant.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#13 | |||
|
Membre du Club
![]() Inscription : novembre 2007 Messages : 226 ![]() |
Merci pour votre réponse, je cherche l'aide pas de faire tout mon boulot non plus.
Message d'erreur: Citation:
Description exacte: Code :
Juste je demande l'aide. |
|||
|
|
00
|
|
|
#14 | ||||
![]() ![]() |
Citation:
Description exacte: Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||||
|
00
|
|
|
#15 | ||
|
Membre du Club
![]() Inscription : novembre 2007 Messages : 226 ![]() |
Bonjour Mr. CinePhil,
J'ai utilisé la requête suivante qui donne parfaitement la quantité reste à livrer: Code :
Croyez moi hier toute la nuit j'ai essayé de faire ça mais le problème c'est que suite à une petite modification le résultat se change, j'ai trouvé des difficultés. Si vous pouvez me donner une piste pour faire ça. Merci pour votre compréhension et votre aide. |
||
|
|
00
|
|
|
#16 | ||
![]() ![]() |
J'ai corrigé ma requête. Il manquait le COALESCE dans le HAVING, et bien sûr le problème de REFERNECE_FOUR.
Code :
Je viens d'y ajouter les infos qui te manquaient. Mais tes tables sont vraiment mal foutues !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
10
|
|
|
#17 | ||
![]() ![]() |
Edit : Edit aussi, rajout table fournisseur !
D'ailleurs, les sous-requêtes ne me paraissent pas utiles ici, je pense qu'on peut l'écrire ainsi : Code :
__________________
Email : http://scr.im/waldar |
||
|
00
|
|
|
#18 |
|
Membre du Club
![]() Inscription : novembre 2007 Messages : 226 ![]() |
Bonjour à tous,
Merci beaucouuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuup pour vos réponses. Mr. Waldar, J'ai l'erreur ORA-00904: "F"."LIBELLE_FOUR": IDENTIFICATEUR NON VALIDE. Et merci pour votre aide. |
|
|
00
|
|
|
#19 |
![]() ![]() |
Je n'avais pas rajouté la table fournisseur de la nouvelle requête de Cinephil : j'ai corrigé le code initial.
Avez-vous aussi testé la sienne - qui doit fonctionner ?
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#20 |
|
Membre du Club
![]() Inscription : novembre 2007 Messages : 226 ![]() |
Bonjour mes Mr,
Merci de nouveau pour vos solutions. Je veux savoir comment à partir de ces solutions avoir les numéros de commandes et leurs fournisseurs. à propos la structure des tables, Mr. CinePhil vous me disez que mes tables sont mal foutues, vous pouvez m'expliquer mieux que ça. Merci. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com