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 :

Compteur par catégorie


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Compteur par catégorie
    Bonjour à tous,

    Très novice en Access, je cherche à inclure un compteur de ligne qui ce réinitialiserait à chaque nouveau RANK.

    Ma requête actuelle est la suivante, sur 2 tables (COLL & FRAIS):

    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
    SELECT  
      [COLL].MATRICULE,  
      [COLL].NOM,  
      [COLL].PRENOM,  
      [COLL].RANK,  
      Sum([FRAIS].MT) AS SumOfMT
    FROM  
      [COLL] INNER JOIN [FRAIS]  
    ON  
      [COLL].MATRICULE=[FRAIS].MATRICULE
    GROUP BY  
      [COLL].MATRICULE,  
      [COLL].NOM,  
      [COLL].PRENOM,  
      [COLL].RANK,  
    ORDER BY  
      [COLL].RANK, Sum([FRAIS].MT) DESC;
    Le résultat donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    MATRICULE      | NOM     | PRENOM  | RANK       | SumOfMT
    20             | TITI    | Claude  | Ass.Com    | 300
    15             | TATA    | Daniel  | Ass.Com    | 200
    3              | TOTO    | Paul    | Commercial | 1000
    1              | RIRI    | Jean    | Commercial | 800
    4              | FIFI    | Louis   | Commercial | 500
    16             | DUBOSS  | Nicolas | Gérant     | 700
    Et je voudrais rajouter une colonne CPT pour obtenir ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    MATRICULE      | NOM     | PRENOM  | RANK       | SumOfMT | CPT
    20             | TITI    | Claude  | Ass.Com    | 300     | 1
    15             | TATA    | Daniel  | Ass.Com    | 200     | 2
    3              | TOTO    | Paul    | Commercial | 1000    | 1
    1              | RIRI    | Jean    | Commercial | 800     | 2
    4              | FIFI    | Louis   | Commercial | 500     | 3
    16             | DUBOSS  | Nicolas | Gérant     | 700     | 1

    J'ai beau chercher sur le net depuis quelques jours, je n'arrive pas à créer le bon module (ou fonction) pour faire cette satané boucle.
    Je pensais que ma solution était dans Dcount mais je ne comprend pas comment faire.

    Je précise que ma version d'Access est US

    !HELP

  2. #2
    Membre expérimenté Avatar de bernardmichel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    1 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 181
    Points : 1 591
    Points
    1 591
    Par défaut
    Hello !

    Quel est le but de ta requête ? Affichage ? Impression ? Alimenter un formulaire ?
    Si son but n'est pas d'alimenter un formulaire, tu peux biaiser le problème en créant un état avec ta requête. Il te suffit dès lors de créer un regroupement sur RANK puis appliquer la technique de numérotation des lignes (voir ci-dessous)

    Dans la zone "Détail" de ton état, tu crées une zone de texte que tu vas nommer "Compteur" (par exemple) puis, comme "Source contrôle", tu vas écrire =1 puis tu vas sélectionner "Cumul" : "Par groupe"

    Voilà, il me semble que cela devrait marcher comme ça... mais bien sûr, si tu dois alimenter un formulaire... c'est ailleurs qu'il faudra chercher

  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 : 52
    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
    tu devrais regarder la discution ici
    le 100%SQL ici ou au premier post de la discution.
    mais en sql il te faut un champ strictement ordonné. sinon le vba s'impose comme la solu la plus approprié ici
    bien sur à adapter à ton cas qui est moins restrictif.


  4. #4
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par vodiem Voir le message
    tu devrais regarder la discution ici
    le 100%SQL ici ou au premier post de la discution.
    mais en sql il te faut un champ strictement ordonné. sinon le vba s'impose comme la solu la plus approprié ici
    bien sur à adapter à ton cas qui est moins restrictif.

    Bonjour à tous,

    Merci vodiem, j'avais déjà repérer le topic de la course de chevaux, notament le code vba mais je n'ai pas réussi à l'appliquer à mon cas

    Mon but final étant pour le moment d'afficher les n plus grosses dépenses par RANK.

    Un TOP n en sous-requête étant particulièrement lent apparement, je pensais faire une première requête trié par RANK/MONTANT avec le compteur en boucle.
    Ce compteur me permettant ensuite de limiter l'affichage
    via une autre requête.

  5. #5
    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 : 52
    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
    si tu veux en vba, voici l'adaptation à ton cas:

    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
    Sub creerIndice(monSQL, groupe, champIndice As String)
    Dim r As DAO.Recordset
    Dim prec As String
     
    Set r = CurrentDb.OpenRecordset(monSQL)
     
    prec = ""
    i = 1
    While Not r.EOF
        If prec <> r.Fields(groupe) Then
            i = 1
            prec = r.Fields(groupe)
        End If
     
        r.Edit
        r.Fields(champIndice) = i
        r.Update
     
        i = i + 1
        r.MoveNext
    Wend
    End Sub
    dans un module à part.

    puis, tu appels:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    maRequete="SELECT [COLL].indice, [COLL].MATRICULE, [COLL].NOM, [COLL].PRENOM,... ORDER BY [COLL].RANK, Sum([FRAIS].MT) DESC;"
    creerIndice(maRequete,"RANK","indice")
    en créant au préalable un champ numérique "indice" dans ta table [COLL].

Discussions similaires

  1. Comment savoir si un champ est compteur par req
    Par nanou9999 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 14/09/2006, 12h18
  2. Requete Annonces par catégorie
    Par AlphonseBrown dans le forum Langage SQL
    Réponses: 8
    Dernier message: 09/06/2006, 23h08
  3. Sous totaux par catégorie d'une colonne
    Par Benjamin78 dans le forum Sybase
    Réponses: 2
    Dernier message: 22/03/2006, 09h35
  4. [CR8.5] Total par catégorie
    Par sperron dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 21/02/2005, 11h00

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