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 :

problème avec fonction DSUM


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 22
    Points : 12
    Points
    12
    Par défaut problème avec fonction DSUM
    Bonjour,

    J'ai une table t avec 3 champs : client, année, CA.

    Le champ année peut prendre les valeurs : 2004, 2005, 2006, 2007.
    Je voudrais avoir la somme cumulée des CA par année et par client. (donc que, pour chaque client, le CA cumulé 2005 soit la somme du CA 2004 et du CA 2005, etc...).

    J'ai donc utilisé la fonction DSUM :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT t.client, t.annee, DSum("CA","t","t.annee<=" & [t.annee] and "t.client=" & [t.client]) AS Cumul
    FROM t
    GROUP BY t.client, t.annee, DSum("CA","t","t.annee<=" & [t.annee] and "t.client=" & [t.client]) AS Cumul;
    Cette requête me renvoie la somme des CA tous clients confondus, toutes années confondues !

    Je pense qu'il s'agit d'une erreur de syntaxe, quelqu'un connait-il la syntaxe exacte de cette fonction ?

    Merci d'avance

  2. #2
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonjour,

    Evites le SomDom et autres fonctions de domaines qui ne sont justifiées que dans des cas précis....

    Tu peux utiliser une sous requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT DISTINCT asT1.client, asT1.Annee, 
      (SELECT SUM(CA) AS sCA 
       FROM t as asT2 
       WHERE asT2.Client = asT1.Client 
                 AND asT2.Annee<= asT1.Annee
       ) AS Cumul
    FROM t AS asT1;

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Merci, ça marche bien !

  4. #4
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    De rien

    Notes que les sous-requêtes sont bien plus efficaces que l'utilisation de fonctions de domaines (DSUM et autres) car le moteur n'est pas en mesure d'optimiser la requête pour ce traitement.


    Bon dev

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

Discussions similaires

  1. Problème avec fonctions et string/char
    Par vdumont dans le forum C++
    Réponses: 6
    Dernier message: 08/04/2006, 16h54
  2. Problème avec fonction
    Par Goundy dans le forum C
    Réponses: 24
    Dernier message: 01/10/2005, 20h17
  3. [MFC][WINSOCK] Problème avec fonction recv
    Par Le Farfadet dans le forum MFC
    Réponses: 4
    Dernier message: 23/09/2005, 11h00
  4. Problème avec fonction d'envoie de mail
    Par zyg dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 23/02/2005, 08h48
  5. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 21h52

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