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

Langage SQL Discussion :

Probleme avec SUM et GROUP BY de 2 tables [FIREBIRD]


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 118
    Points : 89
    Points
    89
    Par défaut Probleme avec SUM et GROUP BY de 2 tables [FIREBIRD]
    bonjour, voici la requete SQL avec Firebird sous IBEasy :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT "GC_CLIENT"."NOM_CLIENT","GC_CLIENT"."PRENOM_CLIENT","GC_CLIENT"."PRIX_ACH",coalesce(Sum("GC_MOUV"."ENTREE_M"),0)as entrEE,coalesce(Sum("GC_MOUV"."SORTIE_M"),0)as sortiE
    ,coalesce(Sum("GC_MOUV"."ENTREE_M"-"GC_MOUV"."SORTIE_M") ,0) as regle ,Sum("GC_CLIENT"."PRIX_ACH"-coalesce(("GC_MOUV"."ENTREE_M"-"GC_MOUV"."SORTIE_M"),0) as reste
    FROM  "GC_CLIENT" left OUTER JOIN  "GC_MOUV" ON "GC_MOUV"."ID_CLIENT"="GC_CLIENT"."CODE_CLIENT"
    GROUP BY "GC_CLIENT"."NOM_CLIENT","GC_CLIENT"."PRENOM_CLIENT" ,"GC_CLIENT"."PRIX_ACH"
    exemple:
    voici le resultat de la requete:
    nom prenom prix_ach entree sortie regle reste
    abbb rrrrr 23500000 7969300 500000 7469300 109030700

    pourquoi le reste egale a 109 030 700 .00 au lieu de 16 030 700.00 ?
    [reste]=[prix_ach]-[regle]

    merci d'avance

    Windows XP ,Firebird 2.x,delphi 7

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 804
    Points
    30 804
    Par défaut
    Si l'un des montants ENTREE_M ou SORTIE_M est NULL, la différence (ENTREE_M -SORTIE_M) sera NULL.
    Il faut prendre cela en compte dans toutes les expressions...

    La requête correcte serait plutôt celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT  GC_CLIENT.NOM_CLIENT
        ,   GC_CLIENT.PRENOM_CLIENT
        ,   GC_CLIENT.PRIX_ACH
        ,   COALESCE(SUM(GC_MOUV.ENTREE_M), 0) AS entrEE
        ,   COALESCE(SUM(GC_MOUV.SORTIE_M), 0) AS sortiE
        ,   COALESCE(SUM(GC_MOUV.ENTREE_M), 0) - COALESCE(SUM(GC_MOUV.SORTIE_M), 0) AS regle
        ,   SUM(GC_CLIENT.PRIX_ACH) - COALESCE(SUM(GC_MOUV.ENTREE_M), 0) + COALESCE(SUM(GC_MOUV.SORTIE_M), 0) AS reste
    FROM    GC_CLIENT 
        LEFT OUTER JOIN  
            GC_MOUV 
            ON  GC_MOUV.ID_CLIENT = GC_CLIENT.CODE_CLIENT
    GROUP BY GC_CLIENT.NOM_CLIENT
        ,   GC_CLIENT.PRENOM_CLIENT
        ,   GC_CLIENT.PRIX_ACH
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 118
    Points : 89
    Points
    89
    Par défaut
    merci al1_24 pour votre reponse mais apre execution sa donne la meme chose.
    exemple:
    table mouv :
    ENTREE_M SORTIE_M ID_CLIENT
    4000000 0 21578392
    1970000 0 21578392
    900000 0 21578392
    1099300 0 21578392
    0 500000 21578392

    table client :
    prix_ach=235 000 000.00

    normalement donne regle=7 469 300.00
    reste=235 000 000.00-7 469 300.00 =16 030 700.00
    alors que dans l'execution de la requete donne reste =110 030 700.00

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 804
    Points
    30 804
    Par défaut
    Est-ce que tu vérifies bien Regle = Entree - Sortie ?
    Retire SUM() autour de GC_CLIENT.PRIX_ACH dans le calcul de Reste ; il est inutile.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 118
    Points : 89
    Points
    89
    Par défaut
    merci al1_24
    la requete marche tres bien apres avoir retiré SUM() autour de GC_CLIENT.PRIX_ACH

    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  GC_CLIENT.NOM_CLIENT
        ,   GC_CLIENT.PRENOM_CLIENT
        ,   GC_CLIENT.PRIX_ACH
        ,   COALESCE(SUM(GC_MOUV.ENTREE_M), 0) AS entrEE
        ,   COALESCE(SUM(GC_MOUV.SORTIE_M), 0) AS sortiE
        ,   COALESCE(SUM(GC_MOUV.ENTREE_M), 0) - COALESCE(SUM(GC_MOUV.SORTIE_M), 0) AS regle
        ,   (GC_CLIENT.PRIX_ACH) - COALESCE(SUM(GC_MOUV.ENTREE_M), 0) + COALESCE(SUM(GC_MOUV.SORTIE_M), 0) AS reste
    FROM    GC_CLIENT 
        LEFT OUTER JOIN  
            GC_MOUV 
            ON  GC_MOUV.ID_CLIENT = GC_CLIENT.CODE_CLIENT
    GROUP BY GC_CLIENT.NOM_CLIENT
        ,   GC_CLIENT.PRENOM_CLIENT
        ,   GC_CLIENT.PRIX_ACH

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme avec SUM
    Par Dine_Med dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/04/2011, 22h52
  2. Rang avec sum et group by
    Par Dadishome dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/05/2010, 21h52
  3. PB Pourcentage Sur requête avec SUM et GROUP BY
    Par laetus dans le forum Langage SQL
    Réponses: 9
    Dernier message: 11/06/2009, 14h18
  4. [SQL] Jointure de table avec SUM et GROUP BY
    Par waterjetmedia dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/09/2007, 13h17
  5. probleme avec SUM et TIMEDIFF
    Par bidochon dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 26/12/2006, 14h31

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