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

Langage SQL Discussion :

[Access] Compter le nombre d'arrivée par année


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 103
    Points
    103
    Par défaut [Access] Compter le nombre d'arrivée par année
    je m'excuse aupres des administrateur, je ne sais pas comment nomner ce post.
    mon probleme est le suivant, j'ai une table comme suit.

    |id_personne|date_arrivee|
    | 1 | 05/10/2002|
    | 1 | 21/11/2002|
    | 2 | 05/10/2000|
    | 3 | 05/10/2001|
    | 4 | 02/10/2001|

    apres une requete SQL, je voudrais obtenir ca :

    Annee | id personne arrivee
    2000 | 2
    2001 | 3
    2001 | 4
    2002 | 1


    Il s'agit de sortir pour chaque annee, toute les personnes arrivee dans l'annee.
    Et si une personne est arrivee plusieurs fois dans une meme annee, on ne la compte pas deux fois pour cette annee.

    je pense qu'il faut utiliser une autre table annee, du genre qui suit et peut etre faire une jointure

    Annee | date_debut | date_fin
    1998 | 01/01/1998 | 31/12/1998
    1999 | 01/01/1999 | 31/12/1999
    2000 | 01/01/2000 | 31/12/2000
    2001 | 01/01/2001 | 31/12/2001
    ...etc

    mais apres pour la requete je ne vois pas comment m'en sortir...

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Salut,

    Merci de tenir compte des CONSEILS... à lire AVANT de POSTER et de préciser (entre autres) votre SGBD.

    Je n'ai pas le mien sous la main (de SGBD), mais que donne la requête suivante ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT (DISTINCT (id_personne)), CAST(date_arrivee AS YEAR)
      FROM MaTable
     GROUP BY CAST(date_arrivee AS YEAR)
    Si cast ne fonctionne pas, essayez de remplacer par une fonction extrayant l'année de ton champ DATE

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 103
    Points
    103
    Par défaut
    pardon, j'utilise le SGBD Ms Access.
    je pensais que ma requete etait faisable en SQL standard.


    Sous access donc, j'arrive a faire quelquechose comme ca :

    SELECT COUNT (id_personne) as nb_personne, YEAR(date_arrivee) as Annee
    FROM Ma_table
    GROUP BY YEAR(date_arrivee)

    Par contre, si je rajoute un DISTINCT a l'interieur du count, access m'envoie peter.
    Il faudrait peut etre deplacer ce topic dans la section Access.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 102
    Points : 28 387
    Points
    28 387
    Par défaut
    Pour avoir pour chaque année la liste des personnes arrivées dans l'année, en prenant en compte les particularités d'Access, la requête serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT  year(date_arrivee)
        ,   id_personne
    FROM    matable
    GROUP BY
            year(date_arrivee)
        ,   id_personne
    ;
    Ce qui correspond à l'exemple de ton premier message

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 103
    Points
    103
    Par défaut
    oui, merci.

    en fait, apres reflexion, je veux plutot compter le nombre de personnes.
    il faudrait donc faire un count, mais avec le notion DISTINCT pour ne pas compter deux fois le gars qui est arrivee deux fois dans une annee.

  6. #6
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Voici comment résoudre ton problème, jeu d'essai à l'appui :

    Mes tests sont fait pour Oracle, je pense que c'est adaptable facilement :

    Je créée une table, avec qq enregistrements :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE Arrivee (
    id_personne NUMBER (10),
    date_arrivee DATE);
     
    INSERT INTO Arrivee VALUES (1, '01/07/2005');
    INSERT INTO Arrivee VALUES (1, '06/12/2005');
    INSERT INTO Arrivee VALUES (1, '26/02/2006');
    INSERT INTO Arrivee VALUES (2, '14/03/2005');
    INSERT INTO Arrivee VALUES (3, '11/11/2005');
    INSERT INTO Arrivee VALUES (3, '04/08/2006');
    A noter que COUNT(DISTINCT ...)) fonctionne sous Oracle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SQL> SELECT COUNT (DISTINCT (id_personne)), TO_CHAR (date_arrivee, 'YYYY')
      2    FROM Arrivee
      3   GROUP BY TO_CHAR (date_arrivee, 'YYYY');
     
    COUNT(DISTINCT(ID_PERSONNE)) TO_C
    ---------------------------- ----
                               3 2005
                               2 2006
    Mais comme tu es sous Access, tu t'en moque, donc on va essayer autre chose !

    La requête suivante te donne le listing que tu veux compter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SQL> SELECT DISTINCT id_personne, TO_CHAR (date_arrivee, 'YYYY') AS ANNEE
      2    FROM Arrivee;
     
    ID_PERSONNE ANNE
    ----------- ----
              1 2005
              1 2006
              2 2005
              3 2005
              3 2006
    Tu devrais donc pouvoir t'en tirer en faisant appel à cette requête en tant que "pseudo"-table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SQL> SELECT COUNT (id_personne), Annee
      2    FROM ( SELECT DISTINCT id_personne, TO_CHAR (date_arrivee, 'YYYY') AS ANNEE
      3             FROM Arrivee)
      4   GROUP BY Annee;
     
    COUNT(ID_PERSONNE) ANNE
    ------------------ ----
                     3 2005
                     2 2006
    Il te reste à remplacer cette affreuse fonction TO_CHAR propre à Oracle par une non moins propriétaire fonction YEAR, et ça devrait coller, non ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 103
    Points
    103
    Par défaut
    yipi yo, yipi yeah !
    ca fonctionne bien, merci beaucoup.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 25/02/2015, 20h16
  2. Compter le nombre de lignes d'un classeur Excel à partir d'Access
    Par mehdiyou1985 dans le forum VBA Access
    Réponses: 3
    Dernier message: 06/12/2012, 15h35
  3. [SQL][ACCESS]Compter le nombres d'enregistrement dans deux..
    Par pc152 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 05/06/2004, 12h30
  4. [TListView] Compter le nombre de lignes
    Par agh dans le forum Composants VCL
    Réponses: 2
    Dernier message: 30/09/2002, 20h25
  5. Compter le nombre ligne listée (COUNT) ?
    Par StouffR dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/09/2002, 09h41

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