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

Access Discussion :

Prix Moyen au fil du temps


Sujet :

Access

  1. #1
    Membre régulier Avatar de hugo69
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    512
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 512
    Points : 122
    Points
    122
    Par défaut Prix Moyen au fil du temps
    jai une table Produit avec :

    IDProduit
    NomProduit



    j'ai une table Client avec:

    IDClient
    NomClient


    j'ai une table Commande avec:

    IDTransaction
    Date
    IDClient
    IDProduit
    QUANTITE
    PRIXACHAT


    J'ai donc les relation appropriée et un formulaire ou l'on voit UN produit en haut et TOUTES les transactions (tous clients confondus) pour ce produit en question.

    Ce que je voudrai cest avoir a coté de chaque ligne de transaction le prix moyen d'achat pour chaque client au fur et à mesure du temps et des commandes.

    Prenons un seul client:

    Achete 100 produits à 10 eur le 01/01 donc PrixAchatMoyen 10
    Achete 200 produits à 20 eur le 01/01 donc PrixAchatMoyen ((100*10)+(200*20))/(100+200)=16.6

    Ect.

    Et chaque prix moyen doit etre affiché sur chaque ligne de transaction.

    A mon avis il faut utiliser une boucle ou quelque chose dans le style et je ne sais comment my prendre.
    Un solution avec des requetes et macros serait le top.

    MErci

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Requête que je considère difficile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT T1.IDTransaction, 
    	T1.Date, 
    	T1.IDClient, 
    	T1.IDProduit, 
    	T1.QUANTITE, 
    	T1.PRIXACHAT, 
    	sum(T2.QUANTITE * T2.PRIXACHAT)/sum(T2.QUANTITE) as PRIXACHATMOYENPONDERE 
    FROM Commande as T1 
    	INNER JOIN Commande as T2 
    		ON T1.IDClient = T2.IDClient
    		AND T1.IDProduit = T2.IDProduit
    		AND T1.Date >= T2.Date
    Mes remarques :

    - Change le nom de champs Date par un DateTransaction ou autre. En effet Date est un mot réservé Access donc tu auras des problèmes si tu l'utilises en nom de champ.
    - Ma requête ne t'expose que la partie utile de ton problème : je n'ai pas encombré du nom du produit, du nom du client qui nécessitent une petite jointure chacun qui ne sont pas problématiques.
    - Complète avec un WHERE éventuel pour filtrer un seul client ou un seul produit. Enfin fais à ta guise.
    - L'éditeur graphique de requête ne te permettra pas de représenter cette requête alors que son execution est possible. Pire même, il détruire la jointure >= qu'il ne peut représenter.

  3. #3
    Membre régulier Avatar de hugo69
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    512
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 512
    Points : 122
    Points
    122
    Par défaut
    je vais regarder ce que cela donne.

    Les noms que j'ai donné ne sont pas ceux de ma base qui est beaucoup plus complete que cela mais cest pour faciliter l'exemple.

    Je vais voir merci bcp.

  4. #4
    Membre régulier Avatar de hugo69
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    512
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 512
    Points : 122
    Points
    122
    Par défaut
    question bete

    a quoi correspondent T1 et T2???

    des tables? mais lesquels.
    Je nai quune table avec des dates ou des quantite ou des prix????

  5. #5
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    regarde mieux le SQL

    T1 et T2 sont des Alias
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FROM Commande as T1
       INNER JOIN Commande as T2
    Dans ce cas précis des alias de la meme table (Commandes) et ce afin de faire des regroupements.
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Si tu regardes la clause from tu peux voir qu'il y a bien commande et qu'elle intervient deux fois. Chaque fois elle a un alias T1 et T2. Quand tu fais la jointure d'une table sur elle même, tu es obligée d'utiliser un alias de table.

    Ainsi T1 présente toutes les transactions et T2 présente pour chaque couple produit/client les transaction qui sont inférieures à la Date de T1. Ainsi en sommant les informations de T2 tu arrives à faire du cumul pour chaque enregistrement de T1.

    edit : grilled

  7. #7
    Membre régulier Avatar de hugo69
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    512
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 512
    Points : 122
    Points
    122
    Par défaut
    Oui cest ce que je vois je ne connaissais pas cette fonction bien utile.

    Ca ne marche pas ca me met , "vous avez essayé d'executer une requete ne comprenant pas l'expression specifique 'IDTransaction' comme une partie de la fonction d'agrégat"

    Si je supprime dans le select l'IDTransaction ca me met le meme message mais avec le date (qui sappelle "Entrée" chez moi)

    ????

  8. #8
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Tu dois faire intervenir dans le group by tous les champs du select qui n'ont pas de fonction de regroupement appliqué (sum, count, max, ...)

  9. #9
    Membre régulier Avatar de hugo69
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    512
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 512
    Points : 122
    Points
    122
    Par défaut
    TU ES MON CHAMPION !!!!!!!!!!


    Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci Merci




  10. #10
    Membre régulier Avatar de hugo69
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    512
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 512
    Points : 122
    Points
    122
    Par défaut
    Je vois que tu es chaud alors je vais passer la seconde.

    Voila exactement à quoi ressemble pour linstant mon code:

    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
    27
    SELECT T1.ID, T1.Entrée, T1.[Num Client], T1.[Nom Produit], T1.Parts, T1.Prix, T1.[Prix V], T1.[Parts V],
     
     
     
    (T1.Parts*T1.Prix*T1.[Change E]) AS MontantAchat, 
    (T1.[Parts V]*T1.[Prix V]*T1.[Change E]) AS MontantVente, 
     
     
    IIf(T1.Parts=0,0,sum(T2.Parts*T2.Prix)/sum(T2.Parts)) AS Pamp,
     
     (T1.[Notre Commission]+T1.[Droit de Timbre]+T1.[Commission Frais de Tiers]+T1.[Commission d'émission]+T1.[Taxe Bourse et CFB]+T1.[Commission Fiduciaire]+T1.DDE+T1.[Valeur Intérêts]+T1.UBS+T1.BSI+T1.CSM+T1.[Commission Courtage])*T1.[Change E] AS FraisAchat, 
     (T1.[Notre Commission]+T1.[Droit de Timbre]+T1.[Commission Frais de Tiers]+T1.[Commission d'émission]+T1.[Taxe Bourse et CFB]+T1.[Commission Fiduciaire]+T1.DDE-T1.[Valeur Intérêts]+T1.UBS+T1.BSI+T1.CSM+T1.[Commission Courtage])*T1.[Change E] AS FraisVente,
     
    IIf(T1.Parts=0,0,(T1.Prix+(FraisAchat/T1.Parts))) AS PrixAchatNet,
    IIf(T1.[Parts V]=0,0,(T1.[Prix V]-(FraisVente/T1.[Parts V]))) AS PrixVenteNet,
     
    IIf(T1.Parts=0,0,sum((T2.Parts*T2.Prix)+(T2.[Notre Commission]+T2.[Droit de Timbre]+T2.[Commission Frais de Tiers]+T2.[Commission d'émission]+T2.[Taxe Bourse et CFB]+T2.[Commission Fiduciaire]+T2.DDE+T2.[Valeur Intérêts]+T2.UBS+T2.BSI+T2.CSM+T2.[Commission Courtage])*T2.[Change E])/sum(T2.Parts)) AS PampNet,
     
    T1.[Parts V]*(T1.[Prix V]) AS Gain,
     
    T1.[Notre Commission], T1.[Droit de Timbre], T1.[Commission Frais de Tiers], T1.[Commission d'émission], T1.[Taxe Bourse et CFB], T1.[Commission Fiduciaire], T1.DDE, T1.[Valeur Intérêts], T1.UBS, T1.BSI, T1.CSM, T1.[Commission Courtage]
     
     
    FROM Interm AS T1 INNER JOIN Interm AS T2 ON (T1.Entrée>=T2.Entrée) AND (T1.[Nom Produit]=T2.[Nom Produit]) AND (T1.[Num Client]=T2.[Num Client])
     
    WHERE T1.[Num Client]="12345"
    GROUP BY T1.ID, T1.Entrée, T1.[Num Client], T1.[Nom Produit], T1.Parts, T1.Prix, T1.[Prix V], T1.[Parts V], T1.[Change E], T1.[Notre Commission], T1.[Droit de Timbre], T1.[Commission Frais de Tiers], T1.[Commission d'émission], T1.[Taxe Bourse et CFB], T1.[Commission Fiduciaire], T1.DDE, T1.[Valeur Intérêts], T1.UBS, T1.BSI, T1.CSM, T1.[Commission Courtage];

    Jai donc tous les PAMP avec les valeurs en Net quand on ajoute les frais de dossiers pour chaque achat.


    Maintenant si je fais une vente jaimerai determiner les gains et performance sur chaque vente.

    Le problème est que sur la ligne des vente je n'aurai pas le PAMP calculé avant qui sera sur les lignes précédente lors des achat.

    Comment faire pour aller le rechercher.

    Ca fait un peu lourd je sais mais cest la finalité de cette requete et le but à atteindre.

    Merci deja pour les infos davant tu mas fait faire un grand pas en avant.


    EDIT: Le champs Gain ne vaut evidement rien pour linstant le but cest davoir:


    T1.Prix * (T1.[Prix V] - Pamp) ### (Prix V etant le prix de vente de cette transaction et Pamp le dernier PAMP avant cette transaction)

  11. #11
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Je ne suis pas là pour :

    1. comprendre ce que tu veux faire
    2. le faire à ta place

    Quand tu lance "quand je fais une vente", celà ne veut rien dire pour moi et ne m'intéresse pas. Je peux t'aider pour t'apporter des notions techniques que tu n'aurais pas, t'aider à les mettre en oeuvre si elles sont complexes.

    Mais tout ce qui est de comprendre parfaitement ce que tu veux faire, l'exposer correctement pour qu'on t'apporte une aide technique relève de ton devoir ici.

    Fais un travail personnel et tâche d'amener le maximum d'éléments. De comprendre ce qu'on a essayé de t'enseigner (ici l'auto jointure), pour le mettre en application quand tu auras à nouveau besoin. Ce n'est pas en disant "Ouah super t'es trop fort" ou "Puisque t'es chaud" que j'aurais envie de t'aider, ce n'est pas ça qui me motive.

  12. #12
    Membre régulier Avatar de hugo69
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    512
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 512
    Points : 122
    Points
    122
    Par défaut
    A mon avis tu n'as pas pu prendre ma dernière question dans le sens réel.
    Ceci doit etre du au coté virtuel dun forum.

    En m'apprenant les auto-jointures tu m'as aidé à résoudre des problèmes que je rencontrais depuis plus d'un an et l'excitation de voir tout fonctionner comme je le voulais m'a un peu poussé à faire du n'importe quoii.

    Tu as raison quand tu dis que je dois faire un travail perso pour mieux présenté mon pb mais tu as tord si tu crois ke jessai de te flatter ou de venir ici de "soustraiter" mon travail en cours.

    Donc j'en reviens à mon problème.

    J''ai donc toujours ma table décrite dans mon premier post.

    A la table commande s'ajoute les champs:

    PrixVente
    QuantiteVente

    Lors dun achat ces deux champs seront à 0
    Lors dune vente ce sera les champs PrixAchat et QuantitéAchat qui seront à 0.

    Le but serait donc de calculer à chaque vente le gain que la vente représente. Pour calculer ce gain il faudrait faire

    = PrixMoyenAchatPondéré de la dernière ligne d'achat (qui serait en fait le PAMP au temps T de la transaction) - Prix de Vente de la transaction en question

    Mais jai beaucoup de mal à visualiser comment à linterieur de cette boucle on pourrait redemander une boucle .

    Jai compris le principe de lauto jointure mais je ne suis pas encore très pointu dessus, je manque d'entrainement.

    Merci


    EDIT: En plus clair la seule chose dont jai besoin cest de pouvoir mettre sur toutes les lignes de résultat le PAMP au temps de la transaction, que ce soit une vente ou un achat.

  13. #13
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Une question à laquelle je n'ai pas la réponse. Est-il normal que tu aies les achats et les ventes dans la même table avec des champs à 0 pour les champs non concernés ?

  14. #14
    Membre régulier Avatar de hugo69
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    512
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 512
    Points : 122
    Points
    122
    Par défaut
    Très bonne remarque.

    J'avais developpé cette base sur ce principe et des saisies (plus de 1000) ont été rentrées.

    Comme je ne connaissais pas le systeme d'auto jointure javais fais un systeme basé sur des PAMP calculé au coup par coup et qui s'incrementaient sur chaque ligne de transaction.

    Je vais essayé de partir sur ta reflexion et de faire des requetes pour recuperer les saisies deja effectuées.

    MErci à toi.

  15. #15
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Je ne dis pas que c'est une mauvaise solution, je t'expose juste l'éventualité.

    Un modèle de données qui correspond réellement à ses besoins et la clé d'une application facile à programmer et cohérente. A toi de voir si ce modèle convient ou pas.

  16. #16
    Membre régulier Avatar de hugo69
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    512
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 512
    Points : 122
    Points
    122
    Par défaut
    Cest une bonne idée mais ca me pose des problèmes dans le rapprochement des soldes de vente dachat pour en faire un solde general des deux.

  17. #17
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Est ce que poser des problèmes veut dire :

    - C'est une approche fausse de mon problème
    ou
    - C'est actuellement faux et je n'ai pas envie ou je ne peux pas modifier l'existant
    ou
    - C'est actuellement faux et je ne sais pas faire avec la nouvelle approche donnée

  18. #18
    Membre régulier Avatar de hugo69
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    512
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 512
    Points : 122
    Points
    122
    Par défaut
    3ème réponse.

    Je n'ai strictement aucune idée de comment faire je tente depuis ce matin.

  19. #19
    Membre régulier Avatar de hugo69
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    512
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 512
    Points : 122
    Points
    122
    Par défaut
    jai resolu le pb avec une requete union entre les deux requetes à rapprocher.

    Puis je crée une nouvelle requete analyse croisée qui va faire le total des données rapprochées.

  20. #20
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Etrange !

    Pourquoi ne pas lier les tables achats et ventes par l'idproduit et l'idclient avec une jointure ?

Discussions similaires

  1. [Eclipse] Ralentissement au fil du temps
    Par GyZmoO dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 17/12/2009, 09h22
  2. Calcul de prix moyens
    Par karima87 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 06/08/2009, 21h16
  3. Le prix moyen d'un site
    Par mikysett dans le forum Devis
    Réponses: 2
    Dernier message: 04/05/2008, 23h22
  4. Prix moyen dans un tableau croisé
    Par titi84 dans le forum SAP Crystal Reports
    Réponses: 7
    Dernier message: 15/04/2008, 16h41
  5. Gestion de stock - Prix Moyen Pondéré
    Par hugo69 dans le forum Access
    Réponses: 33
    Dernier message: 28/10/2005, 17h03

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