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

Requêtes et SQL. Discussion :

regroupement/somme sur plusieurs table et requête, jointure


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Homme Profil pro
    entrepreneur
    Inscrit en
    Juillet 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : entrepreneur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 29
    Points : 10
    Points
    10
    Par défaut regroupement/somme sur plusieurs table et requête, jointure
    Bonjour,

    Je pense avoir saisi le principe des regroupements et somme sur une seule table. Mais je ne trouve des résultats cohérents sur plusieurs table.

    L'objectif est le suivant: avoir en fonction du numéro de lot (noLot - table Reception) le ratio entre le poids aprés production (PoidsDemDet - table DemPoids) et le poids à la réception (poids - table RecepDetails).

    Voici en image ce que j'ai fait et j'ai un poids faux sur la colonne poids.

    Quelqu'un aurait une piste?

    Merci d'avance
    Images attachées Images attachées  

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 261
    Points
    34 261
    Par défaut
    Hello,

    faisons cela par étape
    - obtenir le bon PoidsDemDet
    - obtenir le bon poids
    - faire le ratio

    Ici tu as fais un regroupement sur ton noLot et produit, est-ce normal ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre à l'essai
    Homme Profil pro
    entrepreneur
    Inscrit en
    Juillet 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : entrepreneur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 29
    Points : 10
    Points
    10
    Par défaut
    Hello,

    Oui c'est normale (enfin je pense :-) ) car le numéro de lot correspond à un bon de réception et dans un bon de réception je peux avoir plusieurs type de produit. Le ratio que je cherche s'applique donc sur le numéro de lot et le produit.

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 261
    Points
    34 261
    Par défaut
    OK,

    alors pour pouvoir avancer il nous faudrait le contenu SQL de ta requete, nettement plus facile pour nous ensuite de travailler plutot que d'avoir juste une capture d'écran
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    J'ai considéré qu'il pouvait y avoir +sieurs réceptions pour un lot et plusieurs demandes pour un lot ce qui explique l'effet de multiplication des poids et une erreur de ratio.

    la requete :
    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
     
    SELECT RE.noLot,
           Nz(SumPoidsDemDet)/SumRecetPoids AS RatioPoids
    FROM (Reception AS RE
          INNER JOIN
            (SELECT noLot,
                    SUM(Poids) AS SumRecetPoids
             FROM RecepDetails
             GROUP BY noLot) AS RD ON RE.noLot = RD.noLot)
    LEFT JOIN
      (SELECT DD.noLot,
              SUM(DP.PoidsDemDet) AS SumPoidsDemDet
       FROM DemDetails DD
       INNER JOIN DemPoids DP ON DD.noDemDetail=DP.noDemDetail
       GROUP BY DD.noLot) AS D ON RE.noLot = D.noLot
    ORDER BY RE.noLot

  6. #6
    Membre à l'essai
    Homme Profil pro
    entrepreneur
    Inscrit en
    Juillet 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : entrepreneur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 29
    Points : 10
    Points
    10
    Par défaut
    Voici la requête que j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Reception.noLot, RecepDetails.noLot, RecepDetails.produit, Sum(RecepDetails.poids) AS SommeDepoids, Sum(DemPoids.PoidsDemDet) AS SommeDePoidsDemDet
    FROM (Reception INNER JOIN (DemDetails INNER JOIN DemPoids ON DemDetails.noDemDetail = DemPoids.noDemDetail) ON Reception.noLot = DemDetails.noLot) INNER JOIN RecepDetails ON Reception.noLot = RecepDetails.noLot
    GROUP BY Reception.noLot, RecepDetails.noLot, RecepDetails.produit;
    Pour information, ta requête à l'air de fonctionner dans l'ensemble sauf sur un enregistrement de mes données mais il faut que je vérifie mon test de validation.

    Merci

  7. #7
    Membre à l'essai
    Homme Profil pro
    entrepreneur
    Inscrit en
    Juillet 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : entrepreneur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 29
    Points : 10
    Points
    10
    Par défaut
    Bon j'ai mis du temps mais j'ai compris la requête :-) . Le problème est qu'elle fait la somme sur tout le noLot de reception alors que sur un numéro de lot de réception je peux avoir 2 produits (il s'agit de poisson donc sur une reception on peut avoir du rouget et de la sole). j'aurais besoin d'un rendement par noLot et par produit.

    j'ai essayé le code suivant mais il ne me fait pas le groupement par produit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT RE.noLot, RD.produit as produit, D.SumPoidsDemDet, RD.SumRecetPoids, Nz(SumPoidsDemDet)/SumRecetPoids AS RatioPoids
    FROM (Reception AS RE INNER JOIN (SELECT noLot, produit, SUM(Poids) AS SumRecetPoids FROM RecepDetails GROUP BY noLot, produit)  AS RD ON RE.noLot = RD.noLot) 
    LEFT JOIN 
    (SELECT DD.noLot, DD.produit, SUM(DP.PoidsDemDet) AS SumPoidsDemDet FROM DemDetails AS DD INNER JOIN DemPoids AS DP ON DD.noDemDetail=DP.noDemDetail GROUP BY DD.noLot, DD.produit)  AS D ON RE.noLot = D.noLot
    ORDER BY RE.noLot;

  8. #8
    Invité
    Invité(e)
    Par défaut
    Nelle query pour gérer les produits en plus, à tester :
    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
    23
    24
    25
    26
     
    SELECT
      RE.noLot,
      RD.produit,
      Nz(SumPoidsDemDet) / SumRecetPoids AS RatioPoids
    FROM (Reception AS RE
    INNER JOIN (SELECT
      noLot,
      produit,
      SUM(Poids) AS SumRecetPoids
    FROM RecepDetails
    GROUP BY noLot,
             produit) AS RD
      ON RE.noLot = RD.noLot)
    LEFT JOIN (SELECT
      DD.noLot,
      produit,
      SUM(DP.PoidsDemDet) AS SumPoidsDemDet
    FROM DemDetails AS DD
    INNER JOIN DemPoids AS DP
      ON DD.noDemDetail = DP.noDemDetail
    GROUP BY DD.noLot,
             produit) AS D
      ON (RD.produit = D.produit)
      AND (RD.noLot = D.noLot)
    ORDER BY RE.noLot, RD.produit

  9. #9
    Membre à l'essai
    Homme Profil pro
    entrepreneur
    Inscrit en
    Juillet 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : entrepreneur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 29
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Merci pour ton aide galoir.

    J'aimerai maintenant compléxifier un peu les choses. Dans la table DemDetails, il y a un champ "transfo" pour transfomation. la plupart du temps je ne fais qu'un seul type de transformation par noLot mais il arrive que j'en fasse plusieurs. le champ transformation comprend plusieurs valeurs mais restons sur 2 valeurs pour l'instant. Donc disons que le produit c'est du rouget, il peut y avoir soit du vidé écaillé rendement au environ de 90%, soit du filet avec un rendement avoisinant les 35% à contrôler.

    Je cherche à faire quelque chose proche de l'exemple suivant: si je reçoit 100 kg de rouget et que je décide d'en travailler 50kg en filet et 50kg en vidé écaillé, alors quel est mon rendement de filet ? normalement : rdt filet = poids filet / (100 - poids vidé écaillé / 90%)

    Maintenant, j'aimerai que la valeur de 90% soit récupérer dans une table RdtPoisson avec 4 champs (id, produit, transfo, rdt).

    Je ne sais pas si c'est compréhensible ce que je raconte :-)

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Content que la solution fonctionne.

    Concernant la 2ème demande, merci de clore ce fil et d'en ouvrir un autre ça sera plus clair pour tout le monde

  11. #11
    Membre à l'essai
    Homme Profil pro
    entrepreneur
    Inscrit en
    Juillet 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : entrepreneur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 29
    Points : 10
    Points
    10
    Par défaut
    ça marche encore merci

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

Discussions similaires

  1. Requêtes sur plusieurs tables, jointures ?
    Par trifly dans le forum Requêtes
    Réponses: 1
    Dernier message: 08/07/2011, 16h07
  2. Réponses: 4
    Dernier message: 07/07/2011, 08h51
  3. somme sur plusieurs tables
    Par ch7787 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/08/2010, 15h03
  4. Somme sur plusieurs tables
    Par zurpa dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/09/2009, 23h41
  5. Réponses: 2
    Dernier message: 12/01/2008, 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