IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Requete qui n'affiche pas les bonnes valeurs


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 60
    Points : 37
    Points
    37
    Par défaut Requete qui n'affiche pas les bonnes valeurs
    Bonjour,

    Je suis bloqué sur une requête SQL (j'utilise MYSQL).

    Les tables qui nous interessent sont :

    ARTICLE (NUM_ART (clé primaire), QUANTITE, PRIX, NUM_FOUR, DESIGNATION, REFERENCE)

    VALEUR_ENTREE (NUM_ENTREE (clé primaire), NUM_ART (clé étrangere), QUANTITE_ENTREE, PRIX_ENTREE, PRIX_TOTAL, DESIGNATION_ENTREE, REFERENCE_ENTREE)

    VALEUR_SORTIE (NUM_SORTIE (clé primaire), NUM_ART (clé étrangere), QUANTITE_SORTIE, DESIGNATION_SORTIE, REFERENCE_SORTIE)
    Je fais un logiciel de gestion de stock, on créer un article avec une quantité initiale, ensuite on peu créer des entrée et des sorties pour cet article (ce qui resume les 3 tables ici).

    J'aimerais pour chaque article afficher sa désignation, sa référence et sa quantité réel. (Par quantité réel j'entend la quantité initial (celle dans ARTICLE) + la somme de toutes les entrées qui concerne cet article - la somme de toutes les sorties qui concerne cet article)

    Mon probleme est que mes quantité ne sont pas corrects.

    Sauf dans ce cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DESIGNATION, REFERENCE, NUM_FOUR, SUM(QUANTITE_ENTREE)
    FROM ARTICLE AS A
    LEFT JOIN VALEUR_ENTREE AS Q ON A.NUM_ART = Q.NUM_ART
    GROUP BY A.NUM_ART

    et celui là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DESIGNATION, REFERENCE, NUM_FOUR, SUM(QUANTITE_SORTIE)
    FROM ARTICLE AS A
    LEFT JOIN VALEUR_SORTIE AS Z ON A.NUM_ART = Z.NUM_ART
    GROUP BY A.NUM_ART
    Ces 2 requetes me donnent bien les bonnes quantité par contre si je fais ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DESIGNATION, REFERENCE, NUM_FOUR, SUM(QUANTITE_ENTREE), SUM(QUANTITE_SORTIE)             
    FROM ARTICLE AS A
    LEFT JOIN VALEUR_ENTREE AS Q ON A.NUM_ART = Q.NUM_ART
    LEFT JOIN VALEUR_SORTIE AS Z ON A.NUM_ART = Z.NUM_ART
    GROUP BY A.NUM_ART
    Les quantités calculée sont fausse, je crois qu'il y'a des doublons quelque part qui fausse tout et je n'ais aucune idée de pourquoi, ni comment faire. (on est d'accord c'est pas exactement la requete dont j'ai parlé au dessus, mais si j'arrive a avoir les bonnes valeur pour ca je pourrais sans probleme faire mon calcul)

    Merci d'avance

  2. #2
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 191
    Points : 71
    Points
    71
    Par défaut
    Bonjour,

    A grand hasard as tu essayé de mettre "distinct" apres ton select ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 60
    Points : 37
    Points
    37
    Par défaut
    Salut, merci de me proposer ton aide.

    Oui j'avais déja esseayé le distinct, mais ca ne change rien :s

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 135
    Points : 164
    Points
    164
    Par défaut
    essais ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT DESIGNATION, REFERENCE, NUM_FOUR, SUM(QUANTITE_ENTREE), SUM(QUANTITE_SORTIE)             
    FROM ARTICLE AS A
    INNER JOIN VALEUR_ENTREE AS Q ON A.NUM_ART = Q.NUM_ART
    INNER JOIN VALEUR_SORTIE AS Z ON A.NUM_ART = Z.NUM_ART
    GROUP BY A.NUM_ART
    Pourrais tu nous donner que trouve tu comme resultat et que souhaiterais tu trouver

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 60
    Points : 37
    Points
    37
    Par défaut
    Merci pour ton aide aussi, j'avais déja esseayer avec un inner join mais ce ne fait pas ce que je veux (il n'y'a pas TOUS les articles qui sont affiché avec un inner join)

    Ce que je veux trouver c'est ca :

    DESIGNATION SUM(QUANTITE_ENTREE) SUM(QUANTITE_SORTIE)
    Petit pain chocolat 18 NULL
    Croissant nature 10 NULL
    Galette des rois 15 1
    Croissant fourré 6 4
    Clé a molette 2 5
    Tournevis NULL NULL
    Roue NULL NULL
    Volant NULL NULL
    ca c'est les bonnes valeurs, celle que je devrais avoir

    Et la requete qui donne les mauvaise valeur me donne :

    DESIGNATION SUM(QUANTITE_ENTREE) SUM(QUANTITE_SORTIE)
    Petit pain chocolat 18 NULL
    Croissant nature 10 NULL
    Galette des rois 15 1
    Croissant fourré 24 8
    Clé a molette 2 10
    Tournevis NULL NULL
    Roue NULL NULL
    Volant NULL NULL
    Celle que tu m'as proposé ne me permet pas d'avoir les articles qui n'ont ni entrée ni sortie (les 3 derniers de la liste)

    Je vous copie ce qu'il y'a dans mes table VALEUR_ENTREE et VALEUR_SORTIE :

    VALEUR_ENTREE

    DESIGNATION_ENTREE QUANTITE_ENTREE
    Galette des rois 15
    Petit pain chocolat 15
    Croissant nature 10
    Croissant fourré 1
    Croissant fourré 5
    Petit pain chocolat 3
    Clé a molette 1
    Clé a molette 1

    VALEUR_SORTIE

    DESIGNATION_SORTIE QUANTITE_SORTIE
    Clé a molette 5
    Galette des rois 1
    Croissant fourré 1
    Croissant fourré 1
    Croissant fourré 1
    Croissant fourré 1

    Merci de m'aider, j'espere qu'on va trouver, je désespere ^^

  6. #6
    Membre régulier
    Inscrit en
    Mars 2009
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 191
    Points : 71
    Points
    71
    Par défaut
    Essaie ceci pour voir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DESIGNATION, REFERENCE, NUM_FOUR, SUM(QUANTITE_ENTREE), SUM(QUANTITE_SORTIE)             
    FROM ARTICLE AS A
    LEFT JOIN VALEUR_ENTREE AS Q ON A.NUM_ART = Q.NUM_ART
    LEFT JOIN VALEUR_SORTIE AS Z ON A.NUM_ART = Z.NUM_ART
    GROUP BY A.NUM_ART

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 135
    Points : 164
    Points
    164
    Par défaut
    essais ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT A.NUM_ART, SUM(QUANTITE_ENTREE), SUM(QUANTITE_SORTIE)             
    FROM ARTICLE AS A
    LEFT JOIN VALEUR_ENTREE AS Q ON A.NUM_ART = Q.NUM_ART
    LEFT JOIN VALEUR_SORTIE AS Z ON A.NUM_ART = Z.NUM_ART
    GROUP BY A.NUM_ART

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Tu effectues un produit cartésien entre tes deux tables de quantités, c'est normal que tes cumuls soient faux...
    Il faut faire au moins un des deux regroupements à l'avance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    SELECT  designation
        ,   reference
        ,   num_four
        ,   SUM(quantite_entree)
        ,   total_sortie             
    FROM    article AS A
        LEFT JOIN 
            valeur_entree AS Q 
            ON  A.num_art = Q.num_art
        LEFT JOIN
            (   SELECT  num_art
                    ,   SUM(quantite_sortie)    AS total_sortie
                FROM    valeur_sortie
                GROUP BY num_art
            )   AS Z 
            ON  A.num_art = Z.num_art
    GROUP BY A.num_art
        ,   total_sortie
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 60
    Points : 37
    Points
    37
    Par défaut
    Merci à tous

    J'aurais jamais trouvé, ta solution fonctionne al1_24 ! (par contre celle de Vincinho et teach ne marchent pas).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    SELECT  designation
        ,   reference
        ,   num_four
        ,   SUM(quantite_entree)
        ,   total_sortie             
    FROM    article AS A
        LEFT JOIN 
            valeur_entree AS Q 
            ON  A.num_art = Q.num_art
        LEFT JOIN
            (   SELECT  num_art
                    ,   SUM(quantite_sortie)    AS total_sortie
                FROM    valeur_sortie
                GROUP BY num_art
            )   AS Z 
            ON  A.num_art = Z.num_art
    GROUP BY A.num_art
        ,   total_sortie
    Par contre je n'avais pas prévu que la somme des quantité sortie et la somme des quantités entrés soit séparés dans le code, du coup on peu quand meme soutraire les quantité sortie - quantité entrée ou je dois ratrapper ca avec le code de mon programme ?

  10. #10
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Tu peux aussi faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    SELECT  designation
        ,   reference
        ,   num_four
        ,   total_entree
        ,   total_sortie             
    FROM    article AS A
        LEFT JOIN
            (   SELECT  num_art
                    ,   SUM(quantite_entree)    AS total_entree
                FROM    valeur_entree
                GROUP BY num_art
            )   AS  Q
            ON  A.num_art = Q.num_art
        LEFT JOIN
            (   SELECT  num_art
                    ,   SUM(quantite_sortie)    AS total_sortie
                FROM    valeur_sortie
                GROUP BY num_art
            )   AS Z 
            ON  A.num_art = Z.num_art
    Ainsi, tu as à ta disposition tes totaux dans la requête finale pour en faire tout ce que tu veux
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 60
    Points : 37
    Points
    37
    Par défaut
    Mille merci ! (je suis étudiant en 2eme anée de BTS informatique, tu me sauve la vie =) (pour un projet de stage)) !

    Voilà la requete finale !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    SELECT  designation
        ,   reference
        ,   raison_sociale
        ,   COALESCE(quantite + total_entree - total_sortie, quantite + total_entree, quantite - total_sortie, quantite) AS QUANTITE_REEL                       
    FROM    FOURNISSEUR, article AS A
        LEFT JOIN
            (   SELECT  num_art
                    ,   SUM(quantite_entree)    AS total_entree
                FROM    valeur_entree
                GROUP BY num_art
            )   AS  Q
            ON  A.num_art = Q.num_art
        LEFT JOIN
            (   SELECT  num_art
                    ,   SUM(quantite_sortie)    AS total_sortie
                FROM    valeur_sortie
                GROUP BY num_art
            )   AS Z 
            ON  A.num_art = Z.num_art
    WHERE A.NUM_FOUR = FOURNISSEUR.NUM_FOUR
    Merci a tout le monde encore

  12. #12
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Attention à vos jointures, vous mélangez les deux syntaxes.
    Ce n'est pas faux, mais autant être cohérent !

    Dès que le nombre de table est supérieur à un, utilisez toujours les alias de tables ET préfixez toutes vos colonnes.

    Il manque encore quelques préfixes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    SELECT  designation
        ,   reference
        ,   raison_sociale
        ,   COALESCE(quantite + Q.total_entree - Z.total_sortie, quantite + Q.total_entree, quantite - Z.total_sortie, quantite) AS QUANTITE_REEL                       
    FROM
        fournisseur AS F
        INNER JOIN article AS A
          ON A.num_four = F.num_four 
        LEFT JOIN
            (   SELECT  num_art
                    ,   SUM(quantite_entree)    AS total_entree
                FROM    valeur_entree
                GROUP BY num_art
            )   AS  Q
            ON  A.num_art = Q.num_art
        LEFT JOIN
            (   SELECT  num_art
                    ,   SUM(quantite_sortie)    AS total_sortie
                FROM    valeur_sortie
                GROUP BY num_art
            )   AS Z 
            ON  A.num_art = Z.num_art

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requete qui n'affiche pas tout
    Par sebinator dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 11/12/2007, 17h52
  2. un Jar qui n'affiche pas les images
    Par elghadi_mohamed dans le forum Langage
    Réponses: 1
    Dernier message: 12/11/2007, 15h12
  3. Listview qui n'affiche pas les enregistrements
    Par arindor dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 03/10/2007, 16h31
  4. [SQL] Pb Mysql n'insert pas les bonnes valeur dans la bdd
    Par potao dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 11/02/2007, 03h12
  5. [Requete] qui n'affiche pas les doublons mais sur un seul champs
    Par joseph.breham dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/12/2006, 14h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo