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 :

Peut-on faire des cumuls dans une requete ?


Sujet :

Requêtes et SQL.

  1. #1
    Membre éclairé
    Avatar de kikidrome
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 861
    Points : 685
    Points
    685
    Par défaut Peut-on faire des cumuls dans une requete ?
    je m'explique avec quelques images :


    est-il possible d'écrire une requête qui me donnerait un cumul du nombre d'accidents par population, statut :

    je voudrais pour période P2 le nombre d'accidents de P1 + celui de P2. Pour P3, le nombre d'accidents de P1+P2+P3, etc...

    est-ce possible ?
    Les paysages sont plus beaux quand on transpire.
    Olaf Candau

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT a.population, a.statut, a.periode, Val(Right([periode],Len([periode])-1)) AS ordre, Sum(a.nb) AS SommeDenb, (select sum(b.nb) from matable as b  where Val(Right([periode],Len([periode])-1))<=Val(Right(a.[periode],Len(a.[periode])-1))) As cumul
    FROM matable AS a
    GROUP BY a.population, a.statut, a.periode, Val(Right([periode],Len([periode])-1))
    ORDER BY Val(Right([periode],Len([periode])-1));
    Elle est pas belle la vie ?

  3. #3
    Membre éclairé
    Avatar de kikidrome
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 861
    Points : 685
    Points
    685
    Par défaut
    c'est super sympa de me répondre car je rame en sql...
    j'ai essayé cette requête mais je n'obtiens pas le résultat voulu..

    voilà donc ma table d'origine

    et ce que je voudrais avoir :
    MNF Associés P1 1
    MNF Associés P11 9
    MNF Associés P12 10
    MNF Associés P13 11
    MNF Associés P3 4
    MNF Associés P3 5
    MNF Associés P4 6
    MNF Associés P5 7
    MNF Associés P6 8
    pour P1, c'est 1
    pour P2, c'est 1+3 = 4
    pour P3, c'est 4 + 1 = 5
    etc...

    c'est plus clair ?
    Les paysages sont plus beaux quand on transpire.
    Olaf Candau

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 350
    Points : 1 701
    Points
    1 701
    Par défaut
    Bonsoir,

    Un peu boiteux mais si ça peut aider à faire avancer le smilblick :

    Il me faut une référence unique dans ta table, que ce soit numérique, texte ou date.

    J'ajoute arbitrairement à cette dernière un champ NuméroAuto incrément baptisé-->N° et de suite en fait la clef primaire.

    Une requête :qry_Accidents avec pour source la table-->tbl_Accidents:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT tbl_Accidents.N°, tbl_Accidents.POPULATION, tbl_Accidents.STATUT,
               tbl_Accidents.PERIODE, tbl_Accidents.NB_ACCIDENT, 
      CumulQry("N°",[],"NB_Accident","qry_Accidents") AS [Total accidents]
              FROM tbl_Accidents
    ORDER BY CDbl(Mid([PERIODE],2));
    Et voilà.

    Comment?...J'oublie quelque chose?

    Effectivement. Dans un module :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Function CumulQry(Clef As String, ClefValeur, _
            ChampCumul As String, Table As String)
      Dim RS As DAO.Recordset
      On Error GoTo Err_CumulQry
    CumulQry = 0
      Set RS = CurrentDb().OpenRecordset(Table, dbOpenDynaset)
     
    Select Case RS.Fields(Clef).Type
        ' La clef est Numérique?
        Case DB_INTEGER, DB_LONG, DB_CURRENCY, DB_SINGLE, _
            DB_DOUBLE, DB_BYTE
            RS.FindFirst "[" & Clef & "] = " & ClefValeur
        ' La clef est de type Date/Heure?
        Case DB_DATE
            RS.FindFirst "[" & Clef & "] = #" & Format(ClefValeur, _
            "mm/dd/yyyy") & "#"
        ' La clef est de type Texte?
        Case DB_TEXT
            RS.FindFirst "[" & Clef & "] = '" & ClefValeur & "'"
        Case Else
            MsgBox "ERREUR : Le type de données de la clef n'est pas valide!"
            Exit Function
       End Select
     
    Do Until RS.BOF
        CumulQry = CumulQry + RS(ChampCumul)
        RS.MovePrevious
       Loop
      Set RS = Nothing
    Stop_CumulQry:
        Exit Function
    Err_CumulQry:
        Resume Stop_CumulQry
    End Function
    Cordialement.
    Questions techniques par MP
    Le peu que je sais, c'est à mon ignorance que je le dois.
    ...............................................................................Sacha Guitry

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    Une solution qui calcule le cumul via une sous-requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT
     T1.periode,
     (SELECT Sum(nb_accident) FROM MaTable AS T2 WHERE 
        Val(Mid(T2.periode,2)) <= Val(Mid(T1.periode,2))) AS Cumul
    FROM
     MaTable As T1
    GROUP BY
     T1.periode
    Philippe

  6. #6
    Membre éclairé
    Avatar de kikidrome
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 861
    Points : 685
    Points
    685
    Par défaut
    Un grand merci à tous pour vos explications, je commence à piger...

    Je laisse pour l'instant tomber les 2 premières colonnes et avec cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T1.PERIODE, (SELECT Sum(NB_ACCIDENT) FROM NB_ACCIDENTS AS T2 WHERE 
        Val(Mid(T2.PERIODE,2)) <= Val(Mid(T1.PERIODE,2))) AS CUMUL
    FROM NB_ACCIDENTS AS T1
    GROUP BY T1.PERIODE;

    çà marche bien :


    un question quand même :
    pour la période P8, je n'ai pas d'accident.. alors, je voudrais que le cumul pour P8 soit = au cumul de P7.
    Est-ce possible ????
    Les paysages sont plus beaux quand on transpire.
    Olaf Candau

  7. #7
    Membre éclairé
    Avatar de kikidrome
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 861
    Points : 685
    Points
    685
    Par défaut
    J'ai réussi à m'en sortir avec des lefts join dans crystal report...

    Pour info, voici le graphique que je cherchais à faire :


    Merci à tous pour les bonnes idées.
    Les paysages sont plus beaux quand on transpire.
    Olaf Candau

Discussions similaires

  1. [AC-2000] Faire un cumul dans une requete
    Par aA189 dans le forum VBA Access
    Réponses: 15
    Dernier message: 29/07/2011, 08h22
  2. Réponses: 1
    Dernier message: 28/03/2007, 12h23
  3. [HTML] faire des tabulation dans une liste <select>
    Par renofx1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 20/01/2006, 23h36
  4. Réponses: 2
    Dernier message: 27/03/2005, 16h09
  5. Ne pas tenir compte des accents dans une requete
    Par zamanika dans le forum Installation
    Réponses: 8
    Dernier message: 08/11/2004, 19h49

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