Tri avec plusieurs tables [Résolu]

Signaler
Messages postés
20
Date d'inscription
jeudi 16 février 2017
Statut
Membre
Dernière intervention
15 novembre 2020
-
Messages postés
13212
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2020
-
Bonjour,
J'ai réalisé une application grâce à Excel avec des macros mais celle-ci devient limité au vue des données injectées. Je souhaite donc passé à Access mais je l'ai jamais utilisé ( c'est pour cela que j'ai fait du Vb avec excel la première fois ).
Je découvre donc access au fur et à mesure et me voici déjà bloqué...
J'ai deux tables :
la première : Table Clipper

La seconde : Table ARM


Je souhaite faire un affichage de ce type de colonnes :
Pièce / N°phase / Désignation Phase / nb heure / nb pièces finies / nb de pièces prélevées / Valeurs

Nb de pièces prélevées et valeurs proviennent de la table ARM et le reste de l'autre table.

Mon lien entre les deux tables :
Date prod = Date prélèvement
Employé = initiale
Centre frais = Centre frais

Pour résumer, Lorsque j'ai la même date, le même centre frais, le même employé, ça me trouve la pièce, le n° de phase et sa désignation et fais la somme du nb heure, du nb de pièce finies, du nombre de pièces prélevées, et des valeurs associées.

J'ai fais des essais de requêtes, mais je n'ai pas obtenu satisfaction. Je souhaite savoir quelle procédure suivre.
Je remercie par avance

Configuration: Windows / Chrome 86.0.4240.183

5 réponses

Messages postés
13212
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2020
736
bonjour,
ce serait plus simple pour nous si tu donnais la liste des champs par table, en texte, pas en image.
et plus simple pour toi sans caractères spéciaux dans les noms de champs
peut-être ainsi:
SELECT Pièce , N°phase , DésignationPhase, 
       sum(nbheure),  sum(nbpiècesfinies), sum(nbdepiècesprélevées), 
       sum(Valeurs)
FROM Clipper, ARM
WHERE 
Dateprod = Dateprélèvement  and Employé = initiale 
              and Clipper.Centrefrais = ARM.Centrefrais
GROUP BY Pièce , N°phase , DésignationPhase
Messages postés
20
Date d'inscription
jeudi 16 février 2017
Statut
Membre
Dernière intervention
15 novembre 2020

Merci pour ta réponse. Je prends note pour tes conseils.
Je vais essayer, faut-il que je crée des liaisons entre les tables ? Je reviens vers toi ensuite.
Messages postés
13212
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2020
736
si tu utilises la requête suggérée, il n'est pas nécessaire de créer des relations.
bonjour
oui il faut créer de une relation entre tables
Messages postés
20
Date d'inscription
jeudi 16 février 2017
Statut
Membre
Dernière intervention
15 novembre 2020

Bonjour,
Je reviens sur le sujet après de nombreux essais mais en vain.
Par rapport à la solution ci dessus, le résultat n'est pas les sommes ne sont pas les bonnes comme-ci elles étaient multiplié par le nombre de prélèvement....

Je décide donc de suivre les conseils de yg_be est de vous ré-expliquer mon problème.
J'ai actuellement un logiciel de GPAO qui me crée une liste de production, voici la table que j'injecte dans access : T_Clipper
Ces champs : N°Pointage(Clef primaire), DateProd, RefEmploye, IdMachine,Piece,N°Phase,DesignationPhase,Nbheure,NbPieceBonne

Explication : Tel jour, on produit une pièce sur une machine, par tel employe on fait tant de pièce en tant de temps. Une pièce peut avoir plusieurs phases (ex : 10,20,....)

Ensuite un logiciel de gestion de consommables me donne les consommables prélevés par Machine c'est ma table : T_Arm
Ces champs : N°Prelevement(Clef primaire),DatePrelevement,RefEmploye,IdComposant,QtPrelevee,Valeur,IdMachine

Explication : Tel jour, sur telle machine, l'employé X a prelevé 1 ou plusieurs composants, cela coût tant

Le but final est d'obtenir un état avec une liste avec les champs suivant :
Piece,SommeNbPieceBonnePhaseMax,SommeValeur
ces champ correspondent :
Piece = Toutes les pièces qui apparaissent dans la T_Clipper
SommeNbPieceBonnePhaseMax = après avoir identifié le N°phase maximum par piece (ex : Pour la PC1, la dernière phase (le n°phase maxi) est 20), nous faisons la somme de toutes les pièces bonnes de cette phase.
SommeValeur = La totalité des valeurs prélevées pour cette pièce peu importe les phases.

Premier problème c'est que ma table T_Arm me dit pas que tel prélèvement est réalisé pour tel pièce, tel phase. Le seul lien est : Si DateProd dans T_Clipper = DatePrelevement dans T_Arm et RefEmploye dans T_Clipper = RefEmploye dans T_Arm et IdMachine dans T_Clipper = IdMachine dans T_Arm, ces conditions nous permet donc de lier un prélèvement à une pièce et une phase.

Une fois que j'arrive à faire ce lien, je pense réussir à faire les sommes que je veux pour faire mon état. j'espère avoir été plus clair. Je suis à votre écoute pour toutes remarques si je n'ai pas utilisé la bonne méthodologie.
Messages postés
20
Date d'inscription
jeudi 16 février 2017
Statut
Membre
Dernière intervention
15 novembre 2020
>
Messages postés
13212
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2020

Merci beaucoup, je vais déchiffrer et comprendre !
Pour ce qui est des enregistrements double, j'ai remarqué que ça me créé une somme de valeur de 70€ au lieu de 35€. Malheureusement mon système de GPAO, peut me créer ces doublons. Que me conseilles-tu ? Je l'ai traite avant d'importer mes données sachant que j'importe des fichiers excels ou Je fais une requête avant celles que tu me propose qui me supprime ces doublons en additionnant NbHeure et NbPiecebonne ?
Messages postés
13212
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2020
736 >
Messages postés
20
Date d'inscription
jeudi 16 février 2017
Statut
Membre
Dernière intervention
15 novembre 2020

si ce ne sont pas vraiment des doublons, mais des journées partielles, cela me semble une très bonne idée de commencer par une requête qui les élimine en faisant des sommes.
je pense que tu pourrais aussi simplement ajouter
distinct
dans la requête picval, mais c'est moins propre, mieux vaut anticiper que réagir.

j'avais commencé en faisant une seule requête pour picval et pi_sumval, j'en ai fait deux pour comprendre d'où venait l'erreur de calcul (causée par les doublons).
ensemble cela donnerait, je pense:
SELECT  Piece, sum(valeur) as sumval
FROM T_Clipper AS Clipper, T_ARM AS ARM
WHERE Dateprod = Dateprelevement  and Clipper.refEmploye =ARM.refemploye
              and Clipper.idmachine = ARM.idmachine
GROUP BY Piece;
c'est peut-être plus clair de les garder séparées, à toi de voir.
Messages postés
20
Date d'inscription
jeudi 16 février 2017
Statut
Membre
Dernière intervention
15 novembre 2020
>
Messages postés
13212
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2020

J'ai regroupé, ça fait toujours une requête en moins. Je te remercie pour ce coup de main, c'est top !
Ça m'a permit de comprendre des choses. :)
Messages postés
20
Date d'inscription
jeudi 16 février 2017
Statut
Membre
Dernière intervention
15 novembre 2020
>
Messages postés
20
Date d'inscription
jeudi 16 février 2017
Statut
Membre
Dernière intervention
15 novembre 2020

Salut,
Une dernière question sur le sujet, imaginons qu'il n'y a pas de prélèvement dans la T_Arm qui correspondent à une pièce.
Dans ma base, exemple supprimons les enregistrements du 05/11/2020 de AME sur CU5 (2 enregistrements).
Dans la requête picval, la pièce ne va pas apparaitre et par enchainement nous la retrouverons pas dans la dernière requête.
Y a-t-il une solution pour l'afficher quand même avec le nb de pièce bonne et une somme de valeur égale à 0 ?
Messages postés
13212
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
21 novembre 2020
736 >
Messages postés
20
Date d'inscription
jeudi 16 février 2017
Statut
Membre
Dernière intervention
15 novembre 2020

je n'ai pas testé, j'essaierais ceci:
SELECT n.piece, n.sumpi, nz(v.sumval,0)
FROM nbbon AS n left join pi_sumval AS v
ON n.piece=v.piece;

je pense que, dans tes données, il y avait un cas contraire: une entrée dans ARM sans entrée dans Clipper.
bonjour
pour mieux etudier ton probleme, peux tu mettre ta base compressé en zip dans un lien avec c joint com sur comment ca marche
Messages postés
20
Date d'inscription
jeudi 16 février 2017
Statut
Membre
Dernière intervention
15 novembre 2020

https://www.cjoint.com/c/JKopONs4t6s
Voici ma base compressée, si ça marche
Vous verrez il y a des tables en plus mais c'était pour des essais, elles ne sont peut être pas utiles. Attention des relations existent...