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

WinDev Discussion :

Requête SQL - Résultat incohérent [WD20]


Sujet :

WinDev

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Comptable
    Inscrit en
    Juillet 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2012
    Messages : 57
    Points : 0
    Points
    0
    Par défaut Requête SQL - Résultat incohérent
    Bonjour,
    Je pensais avoir terminé, mais non un problème lors de la phase de mon test est apparu.
    J'ai bien compris l'intérêt d'une requête grâce à vous.
    J'ai donc fait une requête pour les entrées et sorties qui alimente le stock final. Lorsque c'est uniquement pour les entrées le résultat (ex : 2+5=7) est correct.
    Mais lorsque dans cette même requête je rajoute les sorties, le résultat des sommes est incohérent et je bloque.
    Voici mon code :

    Code SQL : 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 
    	Produit.Produit AS Produit,	
    	EntréeStock.Conditionnement AS Conditionnement,	
    	EntréeStock.Prix_Unitaire AS Prix_Unitaire,	
    	SUM(EntréeStock.QuantitéEntrée) AS la_somme_QuantitéEntrée,	
    	SUM(SortieStock.QuantitéSortie) AS la_somme_QuantitéSortie
    FROM 
    	Produit,	
    	EntréeStock,	
    	SortieStock
    WHERE 
    	Produit.IDProduit = SortieStock.IDProduit
    	AND		Produit.IDProduit = EntréeStock.IDProduit
     
    GROUP BY 
    	EntréeStock.Conditionnement,	
    	EntréeStock.Prix_Unitaire,	
    	Produit.Produit

    Pouvez-vous m'aider, merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    C'est tout à fait normal.
    Tu as 2 problèmes dans ta requête:
    • Si un produit n'a pas d'entrée ou de sortie, il n'est pas renvoyé
    • Si un produit à plusieurs entrées ou sorties, les calculs sont faux

    Le premier point vient du fait que tu ne fais que des jointures internes. D'ailleurs ce serait plus visible si tu utilisais l'opérateur JOIN pour les requêtes.
    Le deuxième vient du fait que si un produit à 2 lignes dans entrées et 3 dans sorties, la requête sans le GROUP BY va renvoyer 6 lignes. Les sorties seront doublées, et les entrées triplés. C'est très visible si tu enlèves les regroupements.
    Il faut donc faire la somme des entrées d'une part, la somme des sorties d'autre part et tout regrouper.
    Par exemple:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    select idproduit,sum(entree),sum(sortie)
    from
    (
    select produit.id,sum(entree.qte) as entree,0 as sortie
    from produit
    inner join entrees on entrees.idproduit = produit.id
    group by produit.id
    union
    select produit.id,0 as entree,sum(sortie.qte) as entree
    from produit
    inner join sorties on sorties.idproduit = produit.id
    group by produit.id
    ) group by idproduit

    Tatayo.

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 941
    Points : 1 931
    Points
    1 931
    Par défaut
    Bonjour,

    On commence à ressentir les effets de bord d'un problème de conception de la base de donnée. Je ne sais pas si la requête de @tatayo fonctionnera sur du HFSQL, sinon il faudra faire 2 requêtes distinctes avec ou sans union et parcourir le résultat pour additionner les valeurs.
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Comptable
    Inscrit en
    Juillet 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2012
    Messages : 57
    Points : 0
    Points
    0
    Par défaut Requête - Résultat incohérent
    Citation Envoyé par philouZ Voir le message
    Bonjour,

    On commence à ressentir les effets de bord d'un problème de conception de la base de donnée. Je ne sais pas si la requête de @tatayo fonctionnera sur du HFSQL, sinon il faudra faire 2 requêtes distinctes avec ou sans union et parcourir le résultat pour additionner les valeurs.
    Bonjour,
    J'ai pris connaissance de votre commentaire. J'ai donc créé 2 requêtes, mais lorsque j'en créé une autre avec UNION cela affiche uniquement le libelle Entrée et pas celui de la Sortie ??
    Pourtant le code est bon …. Ca c'est le coté obscure de la force LOL
    Avez-vous une piste.

    Merci à vous

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 941
    Points : 1 931
    Points
    1 931
    Par défaut
    Dans une union, le nom de la colonne est définie par la première requête, ce qui explique qu'elle s'appelle entrée. Il faut rajouter une colonne dans ta requête pour le type de mouvement 'E' as type_mvt pour les entrées, 'S' pour les sorties.
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    @anakinsqt: dans la requête que j'ai donnée il y a une colonne pour les entrées et une pour les sorties dans les 2 SELECT de la sous-requête:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    …
    select produit.id,sum(entree.qte) as entree,0 as sortie
    …
    select produit.id,0 as entree,sum(sortie.qte) as sortie
    (J'avoue, il y avait une faute de frappe dans la deuxième requête, je la laisse volontairement dans le mail d'origine, mais je pense qu'elle n'a pas d'impact).
    Si tu ne le fais pas, comme ceci:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    …
    select produit.id,sum(entree.qte) as entree
    …
    select produit.id,sum(sortie.qte) as sortie
    La requête qui rassemble le tout va tout cumuler, et qui plus est le UNION va dédoublonner les lignes, donc le résultat sera "plus faux que faux" pour les produits donc les entrées égalent les sorties.

    Tatayo.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Comptable
    Inscrit en
    Juillet 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2012
    Messages : 57
    Points : 0
    Points
    0
    Par défaut SQL incohérent
    Citation Envoyé par philouZ Voir le message
    Dans une union, le nom de la colonne est définie par la première requête, ce qui explique qu'elle s'appelle entrée. Il faut rajouter une colonne dans ta requête pour le type de mouvement 'E' as type_mvt pour les entrées, 'S' pour les sorties.
    Bonjour PhilouZ,

    Je ne saisie pas bien, voici le code SQL de ma requête généré par Union :
    Code SQL : 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    SELECT 
    	Produit.Produit AS Produit,	
    	Produit.Conditionnement AS Conditionnement,	
    	Produit.Prix_Unitaire AS Prix_Unitaire,	
    	SUM(EntréeStock.QuantitéEntrée) AS la_somme_QuantitéEntrée
    FROM 
    	Produit,	
    	EntréeStock
    WHERE 
    	Produit.IDProduit = EntréeStock.IDProduit
     
    GROUP BY 
    	Produit.Produit,	
    	Produit.Conditionnement,	
    	Produit.Prix_Unitaire
     
    UNION ALL
     
    SELECT 
    	Produit.Produit AS Produit,	
    	Produit.Conditionnement AS Conditionnement,	
    	Produit.Prix_Unitaire AS Prix_Unitaire,	
    	SUM(SortieStock.QuantitéSortie) AS la_somme_QuantitéSortie
    FROM 
    	Produit,	
    	SortieStock
    WHERE 
    	Produit.IDProduit = SortieStock.IDProduit
     
    GROUP BY 
    	Produit.Produit,	
    	Produit.Conditionnement,	
    	Produit.Prix_Unitaire

    lorsque je teste ma requête, elle me donne le résultat des Sorties est affiché comme Entrées ?
    Pourriez-vous m'aider avec un grand merci

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    C'est tout à fait normal, relis les remarques de philouz et de moi-même, on t'explique pourquoi.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select 1 as toto from dual
    union all
    select 2 as titi from dual
    Cette requête va te renvoyer:
    toto
    1
    2
    C'est pour cela que je suis passé par une sous-requête, c'est pour cela que j'ai mis les entrées et les sorties sur 2 colonnes séparées.

    Tatayo.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Comptable
    Inscrit en
    Juillet 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2012
    Messages : 57
    Points : 0
    Points
    0
    Par défaut Suite
    ???? une sous-requête connait pas

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Comptable
    Inscrit en
    Juillet 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2012
    Messages : 57
    Points : 0
    Points
    0
    Par défaut SQL résultat incohérent
    Mais bon sang, je demande un coup de main, pourquoi ne pas apporter une modification à mon code comme vous le faites pour d'autres membre de ce forum.
    Je ne comprends pas vos réactions et vos réponses.
    Ce n'est pas parce que je n'y connais pas grand chose, j'ai l'impression d'être pris pour un moins que rien.
    J'ai pourtant suivi vos conseil, j'ai supprimé ma table StockFinal et fait une requête comme vous me l'avez suggéré, mais là je bloque

    Bonsoir

  11. #11
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 800
    Points : 5 244
    Points
    5 244
    Billets dans le blog
    1
    Par défaut
    Arrête de rager.
    A chaque fois, c'est la même chose.
    Tu ne sais pas ce qu'est une sous-requête, il suffit de faire des recherches. La notion de sous-requête est développée dans le un des liens qui t'ont étés fournis
    Relis tes cours, lis les liens qui ont été fournis, lis l'auto formation ... ou change de métier.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Comptable
    Inscrit en
    Juillet 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2012
    Messages : 57
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par Voroltinquo Voir le message
    Arrête de rager.
    A chaque fois, c'est la même chose.
    Tu ne sais pas ce qu'est une sous-requête, il suffit de faire des recherches.
    Relis tes cours, lis les liens qui ont été fournis, lis l'auto formation ... ou change de métier.
    Pour un membre éprouvé, c'est vraiment minable d'envoyé balader les gens.

  13. #13
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 049
    Points : 9 384
    Points
    9 384
    Par défaut
    As-tu essayé la requête de Tatayo (message n°2) ?
    As-tu essayé la requête de Tatayo après correction des fautes de frappe ?

    A priori, non.

    Rappel : si il y a une faute de frappe dans la requête, nous, on ne peut pas la détecter, parce qu'on n'a pas ton projet à disposition. Mais toi, tu as tous les outils pour la détecter. Quand un truc plante, Windev te dit pourquoi ça plante, il suffit de lire les messages envoyés par Windev pour corriger facilement les fautes de frappes. Les informations données par Windev sont forcément plus efficaces que les informations données par des forumeurs qui ne sont pas devant ton écran. Et quand Windev envoie un message d'erreur, si tu ne comprends pas le message d'erreur, tu peux copier ce message d'erreur sur le forum, on te dira ce que ça veut dire.

    Tout ça , c'est si tu voulais apprendre à programmer.

    Si tu ne veux pas apprendre à programmer, si tu ne veux pas apprendre à solutionner un problème par toi-même, voici la solution toute faite, en dessous. Tu n'es pas obligé de lire.

    Je fais très attention à ne pas faire de faute de frappe, parce que je sais que tu ne sauras pas les corriger.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select idproduit,sum(entree),sum(sortie)
    from
    (
    select entrees.idproduit  ,sum(entree.qte) as entree, 0 as sortie
    from entrees 
    group by entrees.idproduit
    union
    select  sorties.idproduit  , 0 as entree,  sum(sortie.qte) as sortie
    from sorties
    group by sorties.idproduit 
    ) group by idproduit

    On peut aussi faire comme ça, c'est la solution que je préfère :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select  X.idproduit , X.entree , Y.sortie
    from 
    ( select entrees.idproduit  , sum(entrees.qte) as entree 
    from entrees 
    group by entrees.idproduit
     ) X , 
    (select  sorties.idproduit  ,  sum(sorties.qte) as sortie
    from sorties
    group by sorties.idproduit 
     ) Y
    where X.idproduit = Y.idproduit

    Je pense que la requête de Tatayo,une fois corrigées les erreurs de frappe, ou les 2 requêtes ci-dessus, ça fait déjà 3 solutions au problème.

    PS : Tu ne connais pas les sous-requête. Tu vas sur le site de PCSoft ; c'est l'endroit où il y a la documentation de Windev (https://www.pcsoft.fr/) ; tu vas sur la partie 'Aide en ligne des produits' (https://doc.pcsoft.fr/). Et dans la barre de recherche en haut à droite, tu tapes 'Sous-requête'... et tu auras une page dédiée à ce sujet ! Donc tu n'as pas le droit de dire que tu ne sais pas ce que c'est. Tu ne veux pas savoir ce que c'est , c'est très différent.

    L'aide en ligne, c'est indispensable. Quand je passe 2 ou 3 heures à programmer, c'est sûr qu'à un moment ou un autre, pendant ces 2 ou 3 heures, je vais avoir besoin d'aller sur l'aide en ligne. Il n'y a aucun programmeur qui travaille sans aller lire l'aide en ligne régulièrement. Et si demain, un programmeur me dit qu'il ne se sert jamais de l'aide en ligne, je refuse de travailler avec lui.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    914
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 914
    Points : 1 496
    Points
    1 496
    Par défaut
    Citation Envoyé par anakinsqt Voir le message
    Pour un membre éprouvé, c'est vraiment minable d'envoyé balader les gens.
    Là vous exagérez !!!!
    Faites un peu d'efforts.
    Tout le monde a été patient avec vous, et même quelqu'un vous à envoyé un projet avec le code tout fais,
    Alors retirez vite vos propos, ou j'ai l'impression que le sujet sera vite clos.

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Comptable
    Inscrit en
    Juillet 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2012
    Messages : 57
    Points : 0
    Points
    0
    Par défaut sql suite
    Citation Envoyé par tbc92 Voir le message
    As-tu essayé la requête de Tatayo (message n°2) ?

    etc etc ...
    Merci pour votre aide, ca fonctionne mis à part que la colonne IDProduit me met un chiffre, pas grave je vais chercher
    Pensez-vous que je puisse l'adapter avec les éléments que j'ai cité dans le code que j'avais posté plus haut.

    Cordialement

  16. #16
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 049
    Points : 9 384
    Points
    9 384
    Par défaut
    En repartant de la dernière requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    select  X.idproduit ,  P.produit ,  X.entree , Y.sortie
    from 
    ( select entrees.idproduit  , sum(entrees.qte) as entree 
    from entrees 
    group by entrees.idproduit
     ) X , 
    (select  sorties.idproduit  ,  sum(sorties.qte) as sortie
    from sorties
    group by sorties.idproduit 
     ) Y, 
    Produit P 
    where X.idproduit = Y.idproduit and P.idproduit = x.idproduit
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    Comptable
    Inscrit en
    Juillet 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2012
    Messages : 57
    Points : 0
    Points
    0
    Par défaut SQL Suite
    Un grand merci, ca fonctionne bien, mis à part si j'entre un produit, il ne s'affiche pas, par contre si je mets une sortie, il s'affiche.
    J'ai mis les arguments Tatayo dans le code, sans résultat. Je continue à chercher… Pour info voici votre code adapté à mon projet.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT  X.IDProduit ,  P.Produit ,  X.EntréeStock , Y.SortieStock
    FROM
    ( SELECT EntréeStock.IDProduit  ,SUM(EntréeStock.QuantitéEntrée) AS EntréeStock, 0 AS SortieStock
    FROM EntréeStock
    GROUP BY EntréeStock.IDProduit
     ) X ,
    ( SELECT  SortieStock.IDProduit  ,0 AS EntréeStock, SUM(SortieStock.QuantitéSortie) AS SortieStock
    FROM SortieStock
    GROUP BY SortieStock.IDProduit
    ) Y ,
    Produit P
     
    WHERE X.IDProduit = Y.IDProduit AND P.IDProduit = x.IDProduit

    Encore merci

  18. #18
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 049
    Points : 9 384
    Points
    9 384
    Par défaut
    Je ne vais pas te donner la réponse toute faite, parce que je ne la connais pas par coeur, je ne sais pas exactement la syntaxe acceptée par HyperFile. Par contre, je vais te donner un indice énorme. Ce que tu cherches à faire, ça s'appelle JOINTURE EXTERNE. Tu vas dans l'aide en ligne de Windev https://doc.pcsoft.fr/index.awp Et tu tapes 'Jointure Externe' dans la barre de recherche.
    Si c'est trop compliqué, un habitué de ce forum ira certainement lire l'aide pour toi.

    N'hésite pas à publier la requête finale ici quand tu auras trouvé.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  19. #19
    Nouveau Candidat au Club
    Homme Profil pro
    Comptable
    Inscrit en
    Juillet 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2012
    Messages : 57
    Points : 0
    Points
    0
    Par défaut SQL - Résultat incohérent
    Bon j'ai été sur le site PCSOFT et voilà où j'en suis. J'ai fait un peu comme vous en collant 2 requêtes en une pour obtenir un résultat. Jusque la première ça fonctionne, mais quand j'ajoute la seconde ça plante et un message d'erreur s'affiche.

    Voici mon code, je l'ai sans aucun doute mal fait :

    Code SQL : 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
    SELECT 
    	Produit.Produit AS Produit,	
    	SUM(EntréeStock.QuantitéEntrée) AS la_somme_QuantitéEntrée
    FROM 
    Produit
    	RIGHT OUTER JOIN
    	EntréeStock
    	ON Produit.IDProduit = EntréeStock.IDProduit
    GROUP BY 
    	Produit.Produit
     
    SELECT 
    	Produit.Produit AS Produit,	
    	SUM(SortieStock.QuantitéSortie) AS la_somme_QuantitéSortie,	
    FROM 
    Produit
    	LEFT OUTER JOIN
    	SortieStock
    	ON Produit.IDProduit = SortieStock.IDProduit
    GROUP BY 
    	Produit.Produit,

    Une orientation ou un coup de pouce serait bien venu, j'ai sans doute mal m'y prendre

    Merci

  20. #20
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 049
    Points : 9 384
    Points
    9 384
    Par défaut
    Dans une requête , il y a en principe une seule fois le mot SELECT. C'est le premier mot de la requête.
    Dans les requêtes que j'ai proposées, j'arrivais à mettre plusieurs fois le mot SELECT... parce que je mettais des parenthèses. Les parenthèses servent à créer des espèces de boites noires. Ce qu'il y a à l'intérieur de la parenthèse, ça peut être une requête simple, ou très compliquée. Et de l'extérieur, on voit le résultat de cette requête, comme si c'était une table.

    Bon, j'arrète de parler chinois.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    select  P.idproduit ,  P.produit ,  X.entree , Y.sortie
    from 
    Produit P 
    Left outer join 
     ( select entrees.idproduit  , sum(entrees.qte) as entree 
       from entrees 
       group by entrees.idproduit
     ) X 
    on X.idproduit = P.idproduit
    Left outer Join 
     ( select  sorties.idproduit  ,  sum(sorties.qte) as sortie
       from sorties
       group by sorties.idproduit 
     ) Y 
    on Y.idproduit = P.idproduit

    A tester. Pas garanti 100%.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Oracle] Extraction d'une requête SQL en php vers un csv et nombre de résultats incohérent
    Par Atori dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/04/2018, 11h21
  2. Requète SQL => résultat
    Par stefane26 dans le forum IHM
    Réponses: 1
    Dernier message: 19/10/2011, 22h55
  3. Réponses: 4
    Dernier message: 14/12/2004, 14h34
  4. Résultat d'une requète SQL
    Par camino dans le forum Bases de données
    Réponses: 2
    Dernier message: 21/02/2004, 15h22

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