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 :

Cumuls mensuels par requête (même avec DSUM)


Sujet :

Requêtes et SQL.

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

    Informations forums :
    Inscription : Août 2007
    Messages : 29
    Points : 22
    Points
    22
    Par défaut Cumuls mensuels par requête (même avec DSUM)
    Bonjour à tous,

    je voudrais avec une requête effectuer des cumuls, j'ai une table "T_COC" contenant les champs suivants :

    nom requête : R_COC_calculs_mensuels

    1- NDC : Nbr_demandes_création du mois M

    2- mois_en_cours : le mois M

    T_COC est une table annuelle (donc enregistrements des mois 1 à 12)

    je voudrais qu'une requête me permette de visualiser pour chaque mois le montant cumulé pour le NDC ...

    après avoir lu et relu, testé et re... je n'y arrive pas. j'ai eu un espoir en utilisant la fonction DSUM mais le seul résultat que je récupère est tous les enregistrements (ok) avec sur chacun d'entre eux non pas un cumul des mois précédents mais le cumul global des mois : que je lise le mois 2 ou le mois 6, j'ai les cumuls de 1 à 12 ...

    je vous donne le SQL de ma requête à ce stade, si cela peut aider à visualiser le problème...

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT R_COC_calculs_mensuels.année_en_cours, R_COC_calculs_mensuels.mois_en_cours, R_COC_calculs_mensuels.Nbr_demandes_création, DSum("[Nbr_demandes_création]","T_COC") AS cumul
     
    FROM R_COC_calculs_mensuels
     
    GROUP BY R_COC_calculs_mensuels.année_en_cours, R_COC_calculs_mensuels.mois_en_cours, R_COC_calculs_mensuels.Nbr_demandes_création;

    merci pour votre aide...

    JL

    PS: un bonjour à Maxence que j'ai eu comme formateur en juin dernier...

  2. #2
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Déjà il manque un paramètre à la fonction dsum. Normalement son profil est
    DSum(champ, table, critère)
    qui équivaut à
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select sum(champ)
    from table
    where critère
    Je pense qu'en omettant le critère cela devient équivalent à
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select sum(champ)
    from table
    Mais il faut le vérifier (je ne suis pas sûr).
    Dans ce cas c'est normal que ça te retourne la somme sur tous les mois de ta table.
    Pourquoi ne pas utiliser directement la fonction sum ?
    Sinon peux-tu éclaircir un peu plus ta demande.
    Citation Envoyé par jlfprofoto
    j'ai une table "T_COC" contenant les champs suivants :

    nom requête : R_COC_calculs_mensuels

    1- NDC : Nbr_demandes_création du mois M

    2- mois_en_cours : le mois M

    T_COC est une table annuelle (donc enregistrements des mois 1 à 12)
    Je ne comprends pas trop quelle table contient quels champs.
    Etre ou ne pas être, telle est la question sinusoïdale de l'anachorète hypocondriaque et vice et versa .
    Bonsai monsieur, bonsai madame, vous avez gagnez un milliard de degrés au soleil .
    There is no cure for stupidity (ou pas ).

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

    Informations forums :
    Inscription : Août 2007
    Messages : 29
    Points : 22
    Points
    22
    Par défaut en réponse
    Merci de te pencher sur mon problème déjà,

    sinon en réponse il n'y a

    qu'1 seule table T_COC qui comprend

    12 enregistrements (1 par mois de 1 à 12) et chaque

    enregistrement contient lui meme 2 champs :

    mois_en_cours et Nbr_demandes_création.


    pour ce qui est du critère, je pense avoir essayé en mettant : Nbr_demandes_création <> 0 , mais pas plus de résultat.

    effectivement, DSum se comporte comme Sum pour ma part...

    je continue à chercher mais là je patauge complet...

  4. #4
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par jlfprofoto Voir le message
    sinon en réponse il n'y a

    qu'1 seule table T_COC qui comprend

    12 enregistrements (1 par mois de 1 à 12) et chaque

    enregistrement contient lui meme 2 champs :

    mois_en_cours et Nbr_demandes_création.
    Dans ce cas, que représentent R_COC_calculs_mensuels et le champ année_en_cours ?
    Etre ou ne pas être, telle est la question sinusoïdale de l'anachorète hypocondriaque et vice et versa .
    Bonsai monsieur, bonsai madame, vous avez gagnez un milliard de degrés au soleil .
    There is no cure for stupidity (ou pas ).

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 29
    Points : 22
    Points
    22
    Par défaut en réponse
    R_COC_calculs_mensuels est le nom de ma requête

    année_en_cours est un 3 ème champ mais n'ayant pas d'importance, j'ai préféré l'estomper...

    à partir du moment ou je pourrais arriver à effectuer ces cumuls, mon problème débloqué je pourrais continuer à développer mon projet avec une sacré épine d'enlevée

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Pourquoi faire deux requêtes pour avoir un cumul?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select mois_en_cours, sum(Nbr_demandes_création) As MonCumul From T_COC Group By mois_en_cours
    Amicalement

  7. #7
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Si pour chaque mois_en_cours tu as plusieurs nbre_demandes_creation. Cette requête te permettras d'afficher pour chaque mois_en_cours, la somme des nbre_demandes_creation qui lui sont associés
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select t.mois_en_cours, sum(t.nbre_demandes_creation)
    from t_coc t
    group by t.mois_en_cours
    Sinon, c'est pas très clair pour moi :
    Citation Envoyé par jlfprofoto
    R_COC_calculs_mensuels est le nom de ma requête
    je ne comprends pas trop ce que tu veux faire avec ça :
    Citation Envoyé par jlfprofoto
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT R_COC_calculs_mensuels.année_en_cours, R_COC_calculs_mensuels.mois_en_cours, R_COC_calculs_mensuels.Nbr_demandes_création, DSum("[Nbr_demandes_création]","T_COC") AS cumul
     
    FROM R_COC_calculs_mensuels
     
    GROUP BY R_COC_calculs_mensuels.année_en_cours, R_COC_calculs_mensuels.mois_en_cours, R_COC_calculs_mensuels.Nbr_demandes_création;
    Etre ou ne pas être, telle est la question sinusoïdale de l'anachorète hypocondriaque et vice et versa .
    Bonsai monsieur, bonsai madame, vous avez gagnez un milliard de degrés au soleil .
    There is no cure for stupidity (ou pas ).

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 29
    Points : 22
    Points
    22
    Par défaut ?...
    Heu... je ne tiens pas à faire un simple addition avec Sum mais un cumul d'un enregistrement à l'autre sans discontinuité...

    bon, peut etre que je m'exprime mal alors voilà un aperçu de ma requete :

    http://www.developpez.net/forums/att...1&d=1187700085

    on voit bien que la colonne CUMUL ne fait pas son office.
    moi ce que je veut c'est en :
    enregistrement 2 CUMUL=336+396
    enregistrement 3 CUMUL=336+396+380 ou CUMUL=CUMUL(enrg-1)+380
    et ainsi de suite...
    Images attachées Images attachées  

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 29
    Points : 22
    Points
    22
    Par défaut ?...
    ...
    qu'1 seule table T_COC qui comprend

    12 enregistrements (1 par mois de 1 à 12) et chaque

    enregistrement contient lui meme

    2 champs : mois_en_cours (le premier) et Nbr_demandes_création (le second).
    ....

    qui t'a dit plusieurs Nbr_demandes_creations par mois ? ceci est une donnée globale à rentrer dans la table, c'est un champ (unique)...

    au niveau calcul je ne tiens à calculer qu' 1 seule chose : le cumul mois par mois de Nbr_demandes_creations.

  10. #10
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par jlfprofoto Voir le message
    Heu... je ne tiens pas à faire un simple addition avec Sum mais un cumul d'un enregistrement à l'autre sans discontinuité...

    bon, peut etre que je m'exprime mal alors voilà un aperçu de ma requete :

    http://www.developpez.net/forums/att...1&d=1187700085

    on voit bien que la colonne CUMUL ne fait pas son office.
    moi ce que je veut c'est en :
    enregistrement 2 CUMUL=336+396
    enregistrement 3 CUMUL=336+396+380 ou CUMUL=CUMUL(enrg-1)+380
    et ainsi de suite...
    Là c'est bien plus clair :
    Tu peux essayer un truc du genre :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select t.mois_en_cours, t.nbre_demandes_creation, (t.nbre_demandes_creation + (select sum(t2.nbre_demandes_creation) 
                                                                                   from t_coc t2 
                                                                                   where t2.mois_en_cours < t.moins_en_cours)) as cumul
    from t_coc t;
    Etre ou ne pas être, telle est la question sinusoïdale de l'anachorète hypocondriaque et vice et versa .
    Bonsai monsieur, bonsai madame, vous avez gagnez un milliard de degrés au soleil .
    There is no cure for stupidity (ou pas ).

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 29
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par AL1986 Voir le message
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select t.mois_en_cours, t.nbre_demandes_creation, (t.nbre_demandes_creation + (select sum(t2.nbre_demandes_creation) 
                                                                                   from t_coc t2 
                                                                                   where t2.mois_en_cours < t.moins_en_cours)) as cumul
    from t_coc t;

    je vais essayer mais juste un point que représente t2 et t ? étant donné que je n'ai qu'une seule table...(?)
    mais ayant récupérer ton code je vais tester en attendant ta réponse...

    merci

  12. #12
    Membre chevronné Avatar de Renardo
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 648
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 648
    Points : 2 019
    Points
    2 019
    Par défaut
    Je ne sais pas si cela va t'interessé mais tu peux faire un cumul dans un etat sans te compliquer trop l'existance
    Sinon par requete je l'est fait il n'ya pas tres longtemp il faut passer par 2 requetes identique or mit que une reçoi le cumul
    Exemple de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CumulM²: SomDom("M²Total";"RqRequete6";"ParDate<=" & CDbl(production!ParDate))
    Il faudra aussi que tu filtre ta premiere requete sur l'annee qui t'interresse
    le probleme de se principe plus ta base vas grossir et plus les calculs sont long

  13. #13
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Citation Envoyé par jlfprofoto Voir le message
    je vais essayer mais juste un point que représente t2 et t ? étant donné que je n'ai qu'une seule table...(?)
    t2 et t sont deux alias différents pour la table t_coc, c'est tout.
    Etre ou ne pas être, telle est la question sinusoïdale de l'anachorète hypocondriaque et vice et versa .
    Bonsai monsieur, bonsai madame, vous avez gagnez un milliard de degrés au soleil .
    There is no cure for stupidity (ou pas ).

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 29
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par AL1986 Voir le message
    t2 et t sont deux alias différents pour la table t_coc, c'est tout.

    bon,j'essaye ton code dans tous les sens mais je ne vois pas...

    les alias je dois en faire quoi au juste ? les enlever, les laisser,...?

  15. #15
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par jlfprofoto Voir le message
    bon,j'essaye ton code dans tous les sens mais je ne vois pas...
    C'est juste qu'il ya une erreur dans sa requête.
    ...WHERE t2.mois_en_cours < t.moins_en_cours)...
    ici au lieu de récupérer les données du mois c'est celui d'un autre qu'il prend.

    Il faut un autre champ de comparaison qui permette d'identifier les lignes de chaque enregistrement pour que sa requête puisse donner le bon résultat.

    PS : Si on n'est pas précis dans ces questions, on aura 20 pages avant d'avoir une solution toute simple qui marche.
    Amicalement

  16. #16
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Les alias ne sont pas un problème. J'ai pu récupérer ta capture d'image ou tu disais que le cumul calculé est global. Je pense que c'est lié au where. Je regarde et je te dis ce qu'il en est.
    Etre ou ne pas être, telle est la question sinusoïdale de l'anachorète hypocondriaque et vice et versa .
    Bonsai monsieur, bonsai madame, vous avez gagnez un milliard de degrés au soleil .
    There is no cure for stupidity (ou pas ).

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 29
    Points : 22
    Points
    22
    Par défaut ah !
    Vous savez...?

    on a réussi !!!

    en fait c'est Renardo qui a trouvé les 96% de la réponse et je me suis permis de changer juste le fait d'avoir l'obligation de passer par une requête autre, je pioche directement dans la table ...

    je donne la requête en SQL et la visualisation en image du résultat pour ceux que celà interresseraient...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT T_COC.année_en_cours, T_COC.mois_en_cours, DSum("Nbr_demandes_création","T_COC","T_COC.mois_en_cours<=" & [T_COC.mois_en_cours]) AS Cumul2
     
    FROM T_COC
     
    GROUP BY T_COC.année_en_cours, T_COC.mois_en_cours, DSum("Nbr_demandes_création","T_COC","T_COC.mois_en_cours<=" & [T_COC.mois_en_cours]);
    un grand merci à vous et qui sait à plus...
    Images attachées Images attachées  

  18. #18
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    La question
    Citation Envoyé par jlfprofoto Voir le message
    je voudrais qu'une requête me permette de visualiser pour chaque mois le montant cumulé pour le NDC ...
    la réponse qui satisfait
    SELECT T_COC.année_en_cours, T_COC.mois_en_cours, DSum("Nbr_demandes_création","T_COC","T_COC.mois_en_cours<=" & [T_COC.mois_en_cours]) AS Cumul2

    FROM T_COC

    GROUP BY T_COC.année_en_cours, T_COC.mois_en_cours, DSum("Nbr_demandes_création","T_COC","T_COC.mois_en_cours<=" & [T_COC.mois_en_cours]);
    ----> ----> Je suis peut être mal réveillé ce jour mais je n'y comprend rien du tout
    Amicalement

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 29
    Points : 22
    Points
    22
    Par défaut et oui heureux...
    surtout que ce projet est gros et d'une importance double : pour mon chef et son chef et puis pour moi car ai été chargé de ce poste voilà 5 mois sans n'avoir jamais utilisé Access.

    mais heureusement que mon niveau informatique est correct, et puis j'ai eu de trés bons formateurs pour commencer (il se reconnaitra...)

    merci encore à tous et je ferme le post en "Résolu" grâce à vous...

  20. #20
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Juste un truc, le dsum dans le group by est-il indispensable ? Je pense que ça marchera même sans. cela te fait juste un calcul supplémentaire (à vérifier). Teste et dis moi.
    encore un truc, tu pourrais retester ma requête en la modifiant comme suit :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT t.mois_en_cours, t.nbre_demandes_creation, (SELECT sum(t2.nbre_demandes_creation) 
                                                       FROM t_coc t2 
                                                       WHERE t2.mois_en_cours <= t.moins_en_cours)) AS cumul
    FROM t_coc t;
    Etre ou ne pas être, telle est la question sinusoïdale de l'anachorète hypocondriaque et vice et versa .
    Bonsai monsieur, bonsai madame, vous avez gagnez un milliard de degrés au soleil .
    There is no cure for stupidity (ou pas ).

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

Discussions similaires

  1. etat de sortie par produit et cumul mensuel
    Par karim15 dans le forum WinDev
    Réponses: 2
    Dernier message: 20/09/2010, 08h45
  2. Cumul mensuel par projet
    Par oliviergot dans le forum SQL
    Réponses: 7
    Dernier message: 16/04/2009, 07h47
  3. Cumul quantité par client
    Par bok2000 dans le forum Access
    Réponses: 5
    Dernier message: 20/06/2006, 15h07
  4. Cumul mensuel
    Par energies dans le forum Access
    Réponses: 23
    Dernier message: 30/03/2006, 11h10
  5. [MySQL] requete avec cumul mois par mois
    Par michaelbob dans le forum Langage SQL
    Réponses: 5
    Dernier message: 16/01/2006, 15h32

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