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 :

Requête et plusieurs sommes


Sujet :

Requêtes MySQL

  1. #1
    Membre actif

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 73
    Points : 218
    Points
    218
    Par défaut Requête et plusieurs sommes
    Voilà, je n'arrive pas à effectuer ma requête qui permet à partir d'une liste des factures et d'avoir (t_piececom_entete) de calculer le solde du tiers (client).

    J'ai une table t_piececom_entete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE `t_piececom_entete` (
      `IdPieceComEntete` int(11) NOT NULL auto_increment,
      `TypePiece` tinyint(4) unsigned NOT NULL default '0',
      `IdTiers` varchar(14) NOT NULL default '',
      `TotalHT` decimal(12,2) NOT NULL default '0.00',
      PRIMARY KEY  (`IdPieceComEntete`)
    ) TYPE=MyISAM;
    J'ai les enregistrement suivant (pour les tests) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO `t_piececom_entete` VALUES (1,4,'Olive',50);
    INSERT INTO `t_piececom_entete` VALUES (2,4,'Olive',100);
    INSERT INTO `t_piececom_entete` VALUES (3,5,'Olive',25);
    INSERT INTO `t_piececom_entete` VALUES (4,4,'Minet',200);
    INSERT INTO `t_piececom_entete` VALUES (5,5,'Albert',500);
    Le TypePiece 4 correspond aux Factures.
    Le TypePiece 5 correspond aux Avoirs.
    D'autres TypePiece existe mais ils ne doivent pas être pris en compte.

    Le but est de cumuler la somme des Factures de chaque client, cumuler la somme des Avoirs de chaque client et de faire Facture - Avoir correspond aux Solde du tiers.

    Donc le résultat final devrai être celui-ci :

    Olive | 125
    Minet | 200
    Albert | -500

    Ca paraît simple comme ça mais je n'y arrive pas...

    Ma version de MySQL est la 4.0.16, j'ai donc pensé à faire une table temporaire comme dans le FAQ mais je bloque pour la suite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE TABLE `t_temp` (
      `IdTiers` varchar(14) NOT NULL default '',
      `TotalHT_FC` decimal(12,3) NOT NULL default '0.000',
      `TotalHT_AV` decimal(12,3) NOT NULL default '0.000',
      PRIMARY KEY  (`IdTiers`)
    ) TYPE=MyISAM;
     
    // CREATION DE LA LISTE DES TIERS
    INSERT INTO `t_temp` (`IdTiers`) SELECT `IdTiers` FROM t_piececom_entete
     WHERE `TypePiece`=4 OR `TypePiece`=5 GROUP BY `IdTiers`;
     
    // CREATION DE LA LISTE DES TOTAUX HT POUR LES FACTURES
    ...
    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Ca devrait ressembler à ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT
      IdTiers,
      SUM( IF(TypePiece=4, 1, -1) * TotalHT ) AS solde
     
    FROM t_piececom_entete
    WHERE TypePiece IN (4,5)
     
    GROUP BY IdTiers
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  3. #3
    Membre actif

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 73
    Points : 218
    Points
    218
    Par défaut
    Géant ! Merci beaucoup.

    L'astuce du IF, je n'y avais pas pensé :
    IF(TypePiece=4, 1, -1) * TotalHT
    8)

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

Discussions similaires

  1. Plusieurs sommes dans une requête
    Par fallais dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/10/2011, 16h49
  2. [Cours pt-02][Débutants]Requête avec plusieurs sommes
    Par Papy Turbo dans le forum Sondages et Débats
    Réponses: 18
    Dernier message: 29/10/2007, 18h55
  3. Requète, condition et somme
    Par Sendo dans le forum Access
    Réponses: 4
    Dernier message: 29/09/2005, 14h10
  4. Requête sur plusieurs tables
    Par drinkmilk dans le forum Langage SQL
    Réponses: 8
    Dernier message: 11/07/2005, 12h25
  5. [BDE]requête dans plusieurs bases
    Par sbeu dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/03/2004, 09h24

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