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 MySQL Discussion :

Problème de sum sur 2 tables différentes


Sujet :

Requêtes MySQL

  1. #1
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut Problème de sum sur 2 tables différentes
    Bonjour,

    via 3 tables (écriture, facture, règlement), je tente de faire une réconciliation entre mes écritures, ma facture et mes règlements.

    Chaque écriture dispose d'un type (frais, vente...) et je souhaite, par facture, sortir le montants des écritures par type et le montant des règlements.

    Les écritures appartiennent à une facture et les règlements également. La table centrale est donc facture.

    Voici ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT 
    	  f.Numero
    	, SUM(case when coalesce(typeE, 0) = 1 then (e.Montant) else 0 end) AS Somme1
    	, SUM(case when coalesce(typeE, 0) = 2 then (e.Montant) else 0 end) AS Somme2
    	, SUM(case when coalesce(typeE, 0) = 3 then (e.Montant) else 0 end) AS Somme3
    	, SUM(case when coalesce(typeE, 0) = 4 then (e.Montant) else 0 end) AS Somme4
    	, SUM(coalesce(r.Montant, 0)) AS MontantRegle
    FROM 
    	facture f LEFT JOIN
    	ecriture e ON f.CleFacture = e.CleFacture LEFT JOIN
    	reglement r ON f.CleFacture = r.CleFacture
    GROUP BY
    	f.Numero
    Le problème est que si j'ai une facture qui comporte plusieurs écritures, MontantRegle sera multiplié par le nombre de ces écritures !

    Ou me suis-je planté ?

    Merci de votre aide !

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Si tu ne peux avoir qu'un règlement par facture, tu peux t'en tirer comme ça
    Code mysql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    AVG(SUM(coalesce(r.Montant, 0))) AS MontantRegle
    // ou peut-être
    SUM(coalesce(r.Montant, 0)) / COUNT(DISTINCT r.CleFacture) AS MontantRegle
    Mais il vaudrait mieux repenser la démarche pour trouver une solution moins bancale et plus pérenne.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    En effet, ce n'est pas très propre comme façon de faire (surtout la première)...

    Les factures peuvent avoir plusieurs écritures et plusieurs règlements. Mon but est d'avoir, par facture, la somme des règlement et la somme des écritures (par type). Je suis assez étonnée que cette double agrégation ne soit pas envisageable !

    J'ai même envisagé le schéma suivant :

    ecritures <=> facture f1 <=> facture f2 <=> reglements

    afin d'avoir d'un côté la somme des écritures et de l'autre la somme des règlements, et lier les deux via la clé primaire des factures...

    mais cela ne semble pas fonctionner non plus...

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    Il faut passer par une sous requête et faire 2 group by d'affilé.

    Vous agrégez des choux et des pattates donc forcément le résultat ne peut peut être qu'une soupe !

Discussions similaires

  1. Une requete sur 3 tables différentes. [Le retour]
    Par CritikKiller dans le forum Requêtes
    Réponses: 11
    Dernier message: 13/03/2006, 01h43
  2. SQL Query sur deux tables différentes.
    Par kabal22 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 25/12/2005, 17h52
  3. Sum de deux champs sur deux tables différentes
    Par kluh dans le forum Oracle
    Réponses: 11
    Dernier message: 29/09/2005, 18h21
  4. Problème de requêtes sur deux tables
    Par Pymm dans le forum Access
    Réponses: 6
    Dernier message: 06/09/2005, 09h06
  5. Somme de 3 COUNT() sur 3 tables différentes
    Par PyRoFlo dans le forum Langage SQL
    Réponses: 9
    Dernier message: 13/08/2004, 18h36

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