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 :

Requête pour partager les frais


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 139
    Points : 48
    Points
    48
    Par défaut Requête pour partager les frais
    Bonjour à toutes et à tous,

    Je suis en train de créer une bdd concernant les frais que mon associé et moi avons lors de l'exécution d'un chantier.

    J'ai crée une table avec comme champs : Nom - Date - Type de frais - Montant
    J'ai une requête qui fait la somme de Montant trié par Nom

    Ce que je voudrais faire, c'est une requête qui calcule par rapport à notre façon de fonctionner. A savoir, que les dépenses soient partagées exactement en deux. Donc je voudrais faire un calcul qui me soustrait le total dépensé par nous deux et que ça soit divisé par deux. J'ai essayé de l'ajouter à ma requête existante mais ça fonctionne pas.

    Comment puis je faire ? Une nouvelle requête ? Mais comment ?

    Merci d'avance pour votre aide. Ci joint le début de fichier que j'ai fait.

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 886
    Points : 58 549
    Points
    58 549
    Billets dans le blog
    45
    Par défaut
    bonjour,

    Citation Envoyé par chatomon Voir le message
    Je suis en train de créer une bdd concernant les frais que mon associé et moi avons lors de l'exécution d'un chantier.
    Dans ce cas ne manquerait-il pas un champ (clé étrangère) NumeroChantier dans ta table des frais ? (on doit sommer des frais en regroupant par chantier, non ?).

    De plus je pense qu'il faut pouvoir généraliser au cas où un seul des deux associés paye les frais d'un chantier, ou prévoir le cas d'un futur troisième associé. Non ?

  3. #3
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 139
    Points : 48
    Points
    48
    Par défaut
    Bonjour,

    Merci pour ta réponse.

    Voici les modifications que j'ai faites pour effectivement généraliser la bdd.

    Par contre, je ne comprends pas ce que tu veux dire par clé étrangère. C'est quoi ?

    Comment puis je faire par faire une requête par associé (peu importe le chantier) et une autre par rapport au chantier et par associé ?

    Merci pour votre aide.

    PS : Que c'est dur access après ne plus y avoir touché depuis quelques années

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 886
    Points : 58 549
    Points
    58 549
    Billets dans le blog
    45
    Par défaut
    encore une question pour lever un doute

    si dans la table Frais j'ai qu'un seul des deux associés qui paye des frais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    chantier       Nom     ...    Montant    
    chantier1      toto            100
    chantier1      toto            200
    est-ce que seul toto règle les frais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    chantier       Nom     ...    Montant    
    chantier1      toto            300
    ou bien les frais sont aussi partagés

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    chantier       Nom     ...    Montant    
    chantier1      toto            150
    chantier1      titi            150

  5. #5
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 139
    Points : 48
    Points
    48
    Par défaut
    Bonjour f-leb,

    Merci pour ta réponse.

    En fait, les frais sont partagés. Disons que l'idée de base est tout diviser par deux tant les recettes que les dépenses. Pour les recettes, c'est simples

    En fait si Toto paie 300 et que Titi paie 100, Titi devra 100 à Toto.

    Merci encore

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 886
    Points : 58 549
    Points
    58 549
    Billets dans le blog
    45
    Par défaut
    si je décompose,

    R_TotalFraisChantier:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Chantiers.N° AS NumChantier, Sum(Nz([Montant],0)) AS TotalFraisChantier
    FROM Chantiers LEFT JOIN Frais ON Chantiers.N° = Frais.Chantier
    GROUP BY Chantiers.N°;
    qui retourne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    NumChantier	TotalFraisChantier
    1	              0
    2	              947
    3	              466
    puis R_FraisPartage:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Associes.Associes, Chantiers.Chantier, [TotalFraisChantier]/2 AS FraisPartagé
    FROM Associes, R_TotalFraisChantier INNER JOIN Chantiers ON 
    R_TotalFraisChantier.NumChantier = Chantiers.N°;
    qui retourne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Associes	Chantier	FraisPartagé
    Mustapha	Ain Sebaa	0
    Dimitri	        Ain Sebaa	0
    Mustapha	Tamesna     	473.5
    Dimitri        	Tamesna     	473.5
    Mustapha	Kénitra Hassan  233
    Dimitri	        Kénitra Hassan  233
    ça roule ?

  7. #7
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 139
    Points : 48
    Points
    48
    Par défaut
    Merci f-leb,

    Je regarde tout cela demain matin.
    Ca me paraît très clair. Faut juste que je fasse un calcul de différence entre ce que chaque associé a payé par rapport à l'autre, ce qui permettra alors de savoir ce que doit l'un à l'autre.

    Merci beaucoup.

    Je reviens sur le sujet demain

  8. #8
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 139
    Points : 48
    Points
    48
    Par défaut
    Merci beaucoup, ça fonctionne nickel. Reste quelques petites choses à peaufiner mais là je devrais y arriver

    Par contre, comment puis je faire pour apurer lorsque les associés ont réglés les différences ? Admettons que un associé doit 500 à l'autre et que cela a été réglé ? En fait, je ne voudrais pas que l'apurement modifie les chiffres "comptables" car j'aimerais peaufiner la bdd afin de pouvoir calculer exactement les revenus et dépenses.

    Merci encore

  9. #9
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 139
    Points : 48
    Points
    48
    Par défaut
    Voilà les modifications faites tant pour le nom des tables que quelques détails (je travaille pas en euros, je suis au Maroc donc Dh sans les centimes)

    Sur ce base (et c'est encore là que je bloque) je voudrais avoir une requête (qui finira dans un état avec une belle phrase bien clair pour mon associé )
    qui me calcule ce que doit un associé par rapport à un autre.

    En clair dans l'exemple de la bdd ci joint, un associé doit 1.000 à l'autre. Je me base sur le calcul du montant dépensé par l'un MOINS le montant dépensé par l'autre DIVISE par 2.
    J'arrive pas à faire cette partie.

    Autre petite chose concernant ce point, sera t il possible de créer un état avec un résumé total des dépenses (résumé depuis le dernier règlement entre les associés) qui mentionnera qui doit à qui et combien ?

    Merci encore

  10. #10
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 139
    Points : 48
    Points
    48
    Par défaut
    Bonjour,

    Grâce à l'aide du forum, j'ai réussi à avancer par mal sur la partie "Partage de frais" de la BDD mais je bloque sur un point.

    J'ai une requête qui me donne ci-dessus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Nom	          Chantier	        Somme De Montant
    Mustapha	Ain Sebaa	         1116,00
    Dimitri	Ain Sebaa	         1920,00
    Mustapha	Tamesna	            46,00
    Dimitri	Tamesna	           901,00
    Mustapha	Kénitra Hassan II	     53,00
    Dimitri	Kénitra Hassan II	    413,00
    Je voudrais créer une autre requête qui me calcule par chantier la différence entre ce que Mustapha et Dimitri ont payé. En clair, je voudrais soustraire 1920-1116 et diviser le résultat par deux pour le chantier de Ain Sebaa, soustraire 901 - 46 et diviser par deux, ........ .

    Je n'arrive pas à sélectionner les valeurs de chacun des associés et à les calculer.

    Merci d'avance pour votre aide.

    PS : Sur mon idée, la requête va diviser par deux (vu qu'il y a deux associés) mais comment puis je faire pour automatiser le calcul en fonction du nombre d'associés dans une table ?

    Merci

  11. #11
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 886
    Points : 58 549
    Points
    58 549
    Billets dans le blog
    45
    Par défaut
    bonjour,

    sous quelle forme tu veux le résultat ?

    Comme ça ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Nom	          Chantier	        Somme De Montant    ARegler
    Mustapha	Ain Sebaa	         1116,00            +402 
    Dimitri	        Ain Sebaa	         1920,00            -402
    ...

  12. #12
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 139
    Points : 48
    Points
    48
    Par défaut
    Bonjour f-leb,

    Oui c'est comme cela que je l'envisageais. Je pense que ça me permettra après de faire un état qui me fera une phrase type en fonction de négatif ou du positif du résultat.

    Merci

  13. #13
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 886
    Points : 58 549
    Points
    58 549
    Billets dans le blog
    45
    Par défaut
    par exemple, une requête R_TotalFraisChantier qui ramène par chantier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    N°	TotalFraisChantier
    1	3036
    2	...
    3	...
    une requête R_frais sur la table des frais qui ramène:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Chantier	Nom	     SommeDeMontant
    Ain Sebaa	Mustapha     1 116.00 €
    Ain Sebaa	Dimitri	     1 920.00 €
    ...
    et une dernière requête de sélection R_Frais------R_TotalFraisChantier avec jointure sur le chantier qui ramène:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Chantier	Nom	 SommeDeMontant     TotalFraisChantier
    Ain Sebaa	Mustapha    1 116.00 €	           3 036.00 €
    Ain Sebaa	Dimitri	    1 920.00 €	           3 036.00 €
    ...
    il suffit d'y rajouter une colonne avec la formule pour calculer [ARegler]

  14. #14
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 139
    Points : 48
    Points
    48
    Par défaut
    Bonsoir f-leb

    Tout d'abord merci pour ta réponse.

    C'est exactement ce que j'ai fait mais j'ai un problème dans le résultat, ça me donne des montants qui ne correspondent pas à ce que je demande.

    Dès que j'ajoute une colonne, soit j'ai des montants que je ne comprends soit ça ajoute des lignes (en fait, je pense que ça ne fait pas le regroupement)

    Bref, je comprends pas ce qu'access me fait (ou ce que je lui demande de faire de manière erronée )

  15. #15
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 886
    Points : 58 549
    Points
    58 549
    Billets dans le blog
    45
    Par défaut
    bonjour chatomon,

    il doit y avoir un problème dans les regroupements.

    La 1ère requête R_TotalFraisChantier est un regroupement sur Tbl_Frais.chantier.

    La 2ème requête R_frais est un regroupement sur Tbl_Frais.chantier et Tbl_Frais.Nom.

    La dernière requête qui fait le bilan sur les deux requêtes précédente:R_Frais------R_TotalFraisChantier avec jointure sur le chantier,
    est une simple requête de sélection sans regroupement.

    Où que ça coince ?

  16. #16
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 139
    Points : 48
    Points
    48
    Par défaut
    Bonjour f-leb,

    Je ne peux pas te dire où ça coince, je comprends rien aux chiffres donnés par access.

    J'ai crée une requête R_FraisDuParAssocie en ajoutant le champ de l'autre requête et ça me donne des chiffres venu de je ne sais où.

    J'ai essayé d'enlever le regroupement dans le champs que j'ai ajouté mais ça m'indique une erreur.

    Bref je coince de partout

    Merci encore pour ton temps passé et ton aide.

  17. #17
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 886
    Points : 58 549
    Points
    58 549
    Billets dans le blog
    45
    Par défaut
    bon, je m'y perd un peu dans ton fichier

    Ci-joint le fichier avec les requêtes de mon message #13.

    J'y ai rajouté une requête R_NbrAssociesParChantier qui retourne le nombre d'associés ayant participé aux frais par chantier:

    R_NbrAssociesParChantier:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT Tbl_Chantiers.N°, count(*) AS NbrAssocies
    FROM Tbl_Chantiers 
    INNER JOIN 
    (SELECT DISTINCT Tbl_Frais.Chantier, Tbl_Frais.Nom FROM Tbl_Frais)  AS U 
    ON Tbl_Chantiers.N°=U.Chantier
    GROUP BY Tbl_Chantiers.N°;

    Tu cliques sur R_bilan pour récapituler les frais.
    Attention, j'ai rajouté un associé "toto" pour les tests

    Est-ce que cela convient à tes besoins ?

  18. #18
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 139
    Points : 48
    Points
    48
    Par défaut
    Re bonjour f-leb,

    Merci pour ton fichier. Si toi tu t'y perds, aie aie aie

    En fait dans le message 16, c'est la dernière version de ce que j'ai fait.

    Le problème est sur R_FraisDuParAssocie où les calculs sont fantaisistes dès que j'ajoute le champ FraisPartages de R_FraisPartages

    En fait, je n'arrive pas à avoir un résultat cohérent (et mathématique) de la soustraction du champ Sommedemontant de la R_FraisParAssocie moins le champ FraisPartagé de la R_FraisPartage

    Un résultat comme tu le mentionnes dans ton message 11 serait parfait.

    Merci encore

  19. #19
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 886
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 886
    Points : 58 549
    Points
    58 549
    Billets dans le blog
    45
    Par défaut
    Citation Envoyé par chatomon Voir le message
    Un résultat comme tu le mentionnes dans ton message 11 serait parfait.
    c'est bien ce que j'étais en train de faire

    Tu reprends la requête R_Bilan de mon fichier joint:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Nom	   Chantier	 SommeDeMontant	   TotalFraisChantier	NbrAssocies	
    Mustapha   Ain Sebaa	  1 116.00 € 	    3 036.00 €      	 2
    Dimitri	   Ain Sebaa	  1 920.00 €        3 036.00 €	         2
    Tu as tous les éléments pour faire le calcul en rajoutant une colonne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ARegler: [TotalFraisChantier]/[NbrAssocies]-[SommeDeMontant]
    pour obtenir le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Nom	   Chantier	 SommeDeMontant	   TotalFraisChantier	NbrAssocies	 ARegler
    Mustapha   Ain Sebaa	  1 116.00 € 	    3 036.00 €      	 2               402 €
    Dimitri	   Ain Sebaa	  1 920.00 €        3 036.00 €	         2              -402 €

  20. #20
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 139
    Points : 48
    Points
    48
    Par défaut
    Merci à toi pour cette explication.

    Je vais voir comment je peux l'intégrer dans ma bdd. Je reviens sur le sujet plus tard

    Merci encore à toi.

Discussions similaires

  1. Requête pour obtenir les numéros d'enregistrements
    Par The_Super_Steph dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 16/05/2007, 09h39
  2. requête pour nettoyer les adresses incomplètes
    Par bouba_95 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 07/02/2007, 11h40
  3. Réponses: 2
    Dernier message: 01/12/2006, 11h09
  4. Réponses: 1
    Dernier message: 21/07/2006, 06h56
  5. requête pour exclure les doublons.
    Par sam01 dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/11/2005, 20h10

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