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 :

Compter un nb d'occurences avec critère


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Controleur de gestion
    Inscrit en
    Octobre 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Controleur de gestion
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Compter un nb d'occurences avec critère
    Bonjour !

    Un petit dilemme sur lequel je suis cassée les dents toute l'apres midi !
    J'ai une table de la forme :

    Code / semaine
    A / 42
    A / 41
    A / 40
    A / 38
    A / 37
    B / 42
    B / 37
    ...

    Je voudrais pouvoir compter le nombre de semaines consécutives ou chaque code apparait :
    A / 3
    B / 1

    Sur excel ça fonctionne en magouillant un petit peu, mais sur access je n'y arrive pas... Sans compter que je ne suis pas une pro du sql !

    Si quelqu'un a des idées, je suis tout ouïe...

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 920
    Points
    281 920
    Par défaut
    Bonjour,

    Pour autant que "Code" varie de A à Z (une seule lettre majuscule) et que "Semaine" varie de 1 à 53, voici une procédure dont tu pourrais t'inspirer :
    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
    Public Sub subOccurrences()
    Dim i As Integer
    Dim j As Integer
    Dim iConsecutives As Integer
    Dim iMaxConsecu As Integer
    For j = 65 To 90 'de A à Z pour chr(j)'
    iConsecutives = 0
    iMaxConsecu = 0
       For i = 1 To 53
          If DCount("Code", "TaTable", "Code = """ & Chr(j) & """ and Semaine =" & i) > 0 Then
              iConsecutives = iConsecutives + 1
              If iConsecutives > iMaxConsecu Then iMaxConsecu = iConsecutives
            Else
              iConsecutives = 0
           End If
       Next i
       Debug.Print Chr(j) & " : " & iMaxConsecu
    Next j
    End Sub
    Reviens-moi si tu as besoin d'aide pour l'adapter à ton contexte.

  3. #3
    J1
    J1 est déconnecté
    Membre averti Avatar de J1
    Inscrit en
    Mai 2004
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 321
    Points : 335
    Points
    335
    Par défaut
    Bonjour,

    voici une solution SQL à ta problématique.
    Pour tout t'avouer, la détermination de périodes consécutives n'est pas ce qu'il y a de plus simple à appréhender si tu débutes en SQL et je n'ai malheureusement pas le temps de te détailler le fonctionnement de ma requête. J'espère que cela t'aidera quand même.
    Dans les deux solutions suivantes (la deuxième étant une variante de la première), je considère que ta table se nomme T.

    Pour commencer, une solution avec un NOT EXISTS, peut-être la plus facile à comprendre :
    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
    SELECT Code, MAX(Fin-Debut)+1 AS MaxSemaines
    FROM (
      SELECT Code, Semaine AS Debut, (
        SELECT MIN(Semaine)
        FROM T AS T2
        WHERE Code=T1.Code
        AND Semaine>=T1.Semaine
        AND NOT EXISTS (
          SELECT 1
          FROM T
          WHERE Code=T2.Code
          AND Semaine=T2.Semaine+1)) AS Fin
      FROM T AS T1) X
    GROUP BY Code
    ORDER BY Code
    Et une solution un poil plus dur à comprendre mais aussi plus optimisée, où je remplace le NOT EXISTS par un LEFT JOIN... WHERE... IS NULL.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT Code, MAX(Fin-Debut)+1 AS MaxSemaines
    FROM (
      SELECT Code, Semaine AS Debut, (
        SELECT MIN(T2.Semaine)
        FROM T AS T2
        LEFT JOIN T AS T3
          ON T3.Code=T2.Code
          AND T3.Semaine=T2.Semaine+1
        WHERE T2.Code=T1.Code
        AND T2.Semaine>=T1.Semaine
        AND T3.Semaine IS NULL) AS Fin
      FROM T AS T1) X
    GROUP BY Code
    ORDER BY Code
    Je te laisse t'assurer que cela répond à ton besoin.

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/01/2015, 15h28
  2. compter le nb de cellules avec plusieurs critères
    Par markym dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 04/09/2014, 10h44
  3. [XL-2007] Nombre d'occurences avec deux critères variables
    Par bigor44 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/02/2013, 20h39
  4. compter le nombre d'éntree avec critére sur un champ
    Par gastoncs dans le forum Requêtes
    Réponses: 1
    Dernier message: 30/03/2012, 07h47
  5. Réponses: 8
    Dernier message: 18/01/2005, 10h58

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