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/SQL]Calcul d'un solde dans une requête ou un état


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 3
    Points : 4
    Points
    4
    Par défaut [Requête/SQL]Calcul d'un solde dans une requête ou un état
    J'ai une table reprenant des entrées et des sorties de caisse
    .

    Dans une requête ou un état, je voudrais calculer dans le champ solde la différence entre le solde précedent et le champ entrés/sorties de la ligne.

    En résumé, il devrait y avoir au niveau
    du champ solde du 01/01/07 -->0
    du champ solde du 15/01/07 -->100 (0 + 100)
    du champ solde du 25/01/07 -->75 (100 - 25)
    du champ solde du 03/02/07 -->125 (75 + 50)
    etc

    Merci pour votre aide

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    Sous cette forme le probléme est difficile (à mon avis insoluble mais tu peux le proposer dans les défis) en sql sauf si on ne peut avoir qu’un mouvement par jour ou si date comprend l’heure et est indexée sans doublon.
    En effet la réponse est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT a.date, a.mouvement, 
    (select sum(mouvement) as sm from matable 
    where (date<a.date) or (date=a.date  and  mouvement<=a.mouvement)) AS solde
    FROM matable AS a
    order by date, mouvement;
    il est clair que si deux mouvements égaux ont lieu dans la même journée ils vont partager le même solde.

    Soit on traitera le problème avec dao soit on rajoutera un index.
    Elle est pas belle la vie ?

  3. #3
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    voila le SQL que je te propose:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT A.datecreation, Sum(IIf(B.datecreation<=A.datecreation,B.Nb,0)) AS Cumul
    FROM Table3 AS A, Table3 AS B
    GROUP BY A.datecreation
    ORDER BY A.datecreation;
    avec:
    Table3: nom de table
    datecreation: champ date de référence
    Nb: valeur à cumuler

Discussions similaires

  1. Calculer la somme dan une requête SQL avec JTable
    Par kazan dans le forum Composants
    Réponses: 1
    Dernier message: 30/05/2012, 19h58
  2. [AC-2007] Calcul d’1 champ dans une requête SQL selon différents critères
    Par rch05 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 28/04/2011, 16h44
  3. Récupérer une variable calculée dans une requête SQL
    Par nanar1 dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/01/2009, 11h45
  4. [SQL] insérer des variables php dans une requête sql
    Par lili38 dans le forum PHP & Base de données
    Réponses: 28
    Dernier message: 22/06/2007, 16h38
  5. Récupérer la valeur des champs calculés dans une requète SQL dans vba
    Par FrédéricCM dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 28/06/2006, 16h29

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