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
    Developpeur VBA migrant tranquillement vers C# et VB.Net =]
    Inscrit en
    juillet 2007
    Messages
    12 319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Developpeur VBA migrant tranquillement vers C# et VB.Net =]
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2007
    Messages : 12 319
    Points : 27 141
    Points
    27 141

    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 ?
    Pas de question technique par MP, je ne réponds pas

    Apprendre à programmer avec Access 2016

    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
    Developpeur VBA migrant tranquillement vers C# et VB.Net =]
    Inscrit en
    juillet 2007
    Messages
    12 319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Developpeur VBA migrant tranquillement vers C# et VB.Net =]
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2007
    Messages : 12 319
    Points : 27 141
    Points
    27 141

    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
    Pas de question technique par MP, je ne réponds pas

    Apprendre à programmer avec Access 2016

    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
    Membre averti
    Profil pro
    Inscrit en
    août 2010
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2010
    Messages : 202
    Points : 304
    Points
    304

    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
    Membre averti
    Profil pro
    Inscrit en
    août 2010
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2010
    Messages : 202
    Points : 304
    Points
    304

    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
    Membre averti
    Profil pro
    Inscrit en
    août 2010
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2010
    Messages : 202
    Points : 304
    Points
    304

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

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