|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 21 ![]() |
Bonjour à tous,
Je suis en train de gérer la traçabilité des stocks de vin pour un château, et il se trouve que je me retrouve face à un problème. Donc voici déjà le MLDR J'essaye de mettre au point un état qui permet de savoir, selon le "tiresBouchesMillesimes", le nombre total mis en bouteille, commandé, et sortieDiversetb. Je me sers donc pour cela de mes tables "MiseEnBouteille", "LotCommandé" et "SortieDiverseseTb". J'ai essayé cette requête là : Code sql :
Cela marche très bien, les calculs sont justes, sauf que ça ne me donne les informations seulement pour les codes des tiresBouchesMillesimes qui sont enregistrés dans les trois tables à la fois, c'est-à-dire que par exemple, les tiresBouchesMillesimes qui sont seulement enregistrés dans la miseEnBouteille ET dans les "SortieDiverseTb" n'apparaissent pas. Je tente donc de faire apparaître la liste de tous les tiresBouchesMillesimes, et, pour chacun d'entre eux, de faire apparaître le nombre total mis en bouteille, commandés et sortis(ce qui concerne la casse, le vol et autres...) Cordialement, Anthony |
||
|
|
00
|
|
|
#2 | |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 178 ![]() |
Bonjour Thony3351,
Citation:
Deux conseils :
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
|
10
|
|
|
#3 |
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 21 ![]() |
Oui, je sais bien que c'est normal qu'il ne me sorte que celles qui sont liées, c'est pour cela que je demande de l'aide pour en faire avec des left outer join ou autres ..., choses sur lesquelles je n'ai quasiment pas d'expérience
|
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 178 ![]() |
Il faut donc créer des LEFT JOIN : liaison avec flèche à droite dans l'assistant. Cet assistant est très bien fait et beaucoup plus pratique à utiliser que d'écrire du SQL au kilomètre.
En outre, tu peux récupérer un code SQL juste avec la vision du code généré par l'assistant.
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
10
|
|
|
#5 |
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 21 ![]() |
Je viens de terminer avec l'assistant, j'ai mes trois requêtes distinctes l'une de l'autre, je fais comment maintenant pour les assembler ? Et surtout pour commencer ma première ligne SQL qui les rassemble tous
|
|
|
00
|
|
|
#6 | |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 178 ![]() |
Les requêtes, une fois crées, sont "vues" comme des tables, dans l'assistant.
Citation:
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 21 ![]() |
Je te remercie de l'aide que tu m'apportes, j'avance grandement avec ça!
Il ne me reste plus qu'une petite chose à régler, peut-on faire des requêtes union avec l'assistant ou pas ? |
|
|
00
|
|
|
#8 | ||
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 178 ![]() |
Eh non... pour les requêtes UNION, il faut passer par le mode SQL et taper "bêtement" :
Code :
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
||
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 21 ![]() |
J'aurais juste une dernière petite question, j'utilise un filtre lors de l'ouverture d'un état, et je ne comprends pas quelle est la différence entre filtername et wherecondition ? J'ai une erreur qui me demande d'entrer une date en paramètre lors de l'exécution de l'ouverture de l'état alors que quand je tape la requête (autre que celle écrite plus haut) directement, cela fonctionne parfaitement.
Si quelqu'un pouvait m'éclairer sur ce point là. Cordialement |
|
|
00
|
|
|
#10 |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 178 ![]() |
Bonjour Thony3351,
Je te suggère d'ouvrir une nouvelle discussion dans la partie "Etat" : cela facilitera les recherches futures des utilisateurs de ce forum (un problème => une solution, c'est plus pratique à trouver !). Si l'objet initial de cette discussion est, selon toi, résolu, n'oublies pas le flag (cela facilite, également, les recherches de solutions).
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 21 ![]() |
Il me reste un petit souci dans ma base, j'ai fait jusqu'ici toutes les manipulations expliquées, mais je me retrouve face à un problème que je n'arrive pas à résoudre :
Deux flèches convergent sur la table FormatBouteille, l'une opposée à l'autre, ce qui m'empêche de lancer la requête, et je ne sais pas comment faire, de plus, les requêtes que j'exécute mettent 10 secondes pour se lancer, est-ce normal ? Cordialement, Anthony |
|
|
00
|
|
|
#12 |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 178 ![]() |
Bonjour Thony3351,
Plusieurs choses :
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
00
|
|
|
#13 |
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 21 ![]() |
Toutes les tables qui sont affichées me sont utiles, car, ma requête m'indique les quantités totales expédiées, j'ai donc besoin de caisse_nombreDeCol * expedier_quantité.
Je ne vois pas comment on peut faire pour mettre le sens des flèches sans l'assistant, ne connaissant pas encore les left outer join etc... L'intégrité référentielle y est, c'est juste que sur l'exemple je l'avais supprimée et remise |
|
|
00
|
|
|
#14 |
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 21 ![]() |
Au final ma requête donne ça :
SELECT FamilleVin.FamilleVin_Libelle, Millesime.Millesime_Annee, FormatBouteille.FormatBouteille_Libelle, Sum([expedier_quantite]*[caisse_nombredecol]) AS Expr1 FROM Millesime INNER JOIN ((((FormatBouteille INNER JOIN (Caisse INNER JOIN Conditionnement ON Caisse.Caisse_Code = Conditionnement.Caisse_Code) ON FormatBouteille.FormatBouteille_Code = Caisse.FormatBouteille_Code) INNER JOIN Lot ON Conditionnement.Conditionnement_Code = Lot.Conditionnement_Code) INNER JOIN (LotCommandé INNER JOIN expedier ON LotCommandé.LotCommandé_Code = expedier.lotcommandé_code) ON Lot.Lot_Code = LotCommandé.Lot_Code) INNER JOIN (FamilleVin INNER JOIN TiresBouchesMillesimes ON FamilleVin.FamilleVin_Code = TiresBouchesMillesimes.FamilleVin_Code) ON (TiresBouchesMillesimes.TiresBouchesMillesimes_Code = Lot.TiresBouchesMillesimes_Code) AND (FormatBouteille.FormatBouteille_Code = TiresBouchesMillesimes.FormatBouteille_Code)) ON Millesime.Millesime_Annee = TiresBouchesMillesimes.Millesime_Annee GROUP BY FamilleVin.FamilleVin_Libelle, Millesime.Millesime_Annee, FormatBouteille.FormatBouteille_Libelle Mais ça ne me donne que les tirés bouchés millésimés présents dans les trois, que faut-il modifier dans le code sql pour que ça m'affiche tous les tiresbouchesmillesimes_code ? |
|
|
00
|
|
|
#15 |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 178 ![]() |
Bien.
Le code ne correspond pas à l'image ! (Expr1 inexistant, que des INNER JOIN, etc...). Les flèches sont mal orientées. Par exemple, la flèche devrait être à droite entre Conditionnement et Lot. Ta table primaire est Millesime, donc la requête va partir de Millesime : tous les millésimes sont-ils bien présents ? Crées une requête (vierge), via l'assistant : - ajoutes la table Millesime (FROM) ; - ajoutes la table TiresBouchesMillesimes (FROM) ; ==> postes l'image générée par l'assisant (sans rien toucher).
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
00
|
|
|
#16 |
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 21 ![]() |
Effectivement, la requete ne correspond pas a l'image ; je m'explique. En fait, il y a trois niveaux de requetes pour former ma requete finale que je désire, celle qui liste, par millésime, format et famille de vin, les quantités qui ont été :
Donc à la base je crée quatre requetes pour chacune des quantités :
Sauf que : Pour les quantités commandées et expédiées, je suis obligé, pour chacune des deux requêtes, de les former à partir de deux autres requêtes, car dans ma table lot, j'ai des lot qui sont simplement des bouteilles remplies et bouchées (qui n'ont donc pas de conditionnement, i-e étiquette, régie, caisse..) donc d'une part je fais le total des lot qui ont un conditionnement en faisant les liaisons entre les tables caisse, conditionnement, etc, et et je multiplie la quantité expédiée ou commandée (suivant ce que je veux) par le nombre de col par caisse, d'autre part, je fais le total avec les lots qui n'ont pas de conditionnement, sans lier aux tables caisse et conditionnement et sans multiplier vu qu'il n y a pas de caisse. Ensuite, j'assemble ces deux requêtes pour n'avoir qu'un total par catégorie (commandes, expédition). Et c'est ensuite là, une fois que ces deux requêtes sont réalisées et que les deux autres sont prêtes (mise en bouteille et sortie diverse) que je fais ma requête finale qui se construit à partir de ces quatre requêtes là. Pour chacune des requetes que je fais, j'utilise les fleches afin d'avoir la liste telle quelle : (ex pour le total des mises en bouteilles)
C'est donc ma requête finale qui met 12 sec avant de se lancer ...Elle ressemble à ça :
Voici le MLDR de ma bdd : |
|
|
00
|
|
|
#17 |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 178 ![]() |
Prenons les choses dans l'ordre.
Dans l'image que tu joins, la relation est correcte et sans flèche, donc c'est OK. Dans l'image de ta précédente requête, il y a une flèche de TiresBouchesMillesimes vers Millesime, ce qui est incorrect : c'est l'inverse qui est correct. C'est un exemple. Cela montre que c'est sur le sens des flèches qu'il faut travailler. Peux-tu poster l'image et le SQL de ta 1ère requête ?
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
00
|
|
|
#18 | ||||||
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 21 ![]() |
Oui, les flèches dans la première image, c'est moi qui les ai mises via l'assistant en cliquant sur la relation dans mes tables nécessaires à ma requête(ce n'est pas dans le MLDR mais dans l'ajout d'une requête).
Je mets ces flèches afin que la requête me donne la liste de toutes les valeurs y compris celles qui n'ont pas de données liées, et non la liste seulement qui ont des données liées (ce qui m'évite de taper directement le left outer join que je ne connais pas beaucoup) Donc je mets les requêtes pour le total des commandes : 1° requête des lots avec conditionnement : Code :
2° requête pour lots sans caisse : Code :
3° requête : celle qui assemble les deux premières requêtes : Code :
|
||||||
|
|
00
|
|
|
#19 |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 178 ![]() |
Je te suggère de supprimer la table Millesime dans tes requêtes "filles" et faire le regroupement par le champ (d'autant que la flèche est mal orientée) : cela optimisera l'ensemble.
La table Millesime devra être ajoutée dans la requête "mère" (finale), en premier avec flèche à droite, ce qui donnera NULL aux millésimes sans correspondance. Tu n'as pas besoin, non plus, des tables de références, dans tes requêtes "filles", seule la clé est nécessaire : tu iras chercher le libellé dans ta requête "mère". Pour ta première requête et dans cet ordre : - ajoutes la table TiresBouchesMillesimes (FROM) ; - ajoutes la table Lots (FROM) ; - ajoutes la table LotCommandé (FROM) ; - ajoutes la table Conditionnement (FROM) ; - ajoutes la table Caisse (FROM) ; - lies TiresBouchesMillesimes à Lots avec flèche à droite (LEFT JOIN) ; - lies Lots à LotCommandé avec flèche à droite (LEFT JOIN) ; - lies Lots à Conditionnement avec flèche à droite (LEFT JOIN) ; - lies Conditionnement à Caisse avec flèche à droite (LEFT JOIN) ; - regroupement par Millesime, FamilleVin_Code, FormatBouteille_Code (GROUP BY) ; - Somme de LotCommandé_Quantite*caisse_nombredecol (SUM). ==> j'espère ne rien avoir oublié. Ceci sans contrôle d'éventuelles erreurs de conception.
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
00
|
|
|
#20 |
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 21 ![]() |
"Instruction SQL non exécutée : des jointures externes ambigües. Pour forcer
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com