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 :

Courbe d'effectifs par mois


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 22
    Points : 11
    Points
    11
    Par défaut Courbe d'effectifs par mois
    Bonjour,

    Je voudrais savoir comment je peux faire pour réaliser une requête qui me permet de savoir sur une année l'évolution de mon effectif en fonction des personnes présentes et des personnes qui ont quitté le chantier.

    J'ai comme donnée d'entrée :

    Nom des personnes
    Date d'arrivée
    Date de sortie

    Merci de votre aide je suis débutant

    Fred

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 388
    Points : 19 811
    Points
    19 811
    Billets dans le blog
    66
    Par défaut
    Bonsoir Fred,

    Ton problème demande un peu de travail

    Je vais donc essayer de t'aider:

    En fait si çà ressemble aux taux d'occupations des chambres d'hôtel...
    (on calcule le nombre de nuits pour chaque client et on fait le total par mois)

    Dans ce cas, tu peux calculer les effectifs pour chaque mois de l'année (paramètre).

    Pour ce faire, il te faut créer 2 tables en plus de ta table T_Presence:

    T_Jour(Jour:Entier)
    cette table contient les jours du mois, les valeurs 1,2,3...31

    T_Mois(Mois:Entier)
    cette table contient les mois de l'année, les valeurs 1,2,3...12

    Et ta table:
    T_Presence(Nom_Personne:Texte, Date_Arrivée: Date, Date_Sortie: Date)


    ====================================================


    LES REQUETES:

    R_Jour(DateJ: Date)
    cette requête réalise le produit cartésien des tables T_Jour, T_Mois et affiche tous les jours de l'année choisie, elle a comme paramètre l'année choisie:[An]

    Son sql:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PARAMETERS [An] Value;
    SELECT DateSerial([An],[Mois],[Jour]) AS DateJ
    FROM T_Jour, T_Mois
    WHERE (((DateSerial([An],[Mois],[Jour]))<DateSerial([An],[Mois]+1,1)))
    ORDER BY DateSerial([An],[Mois],[Jour]);

    ---------------

    R_JourPersonne(DateJ: Date, Nom_Personne: Texte)
    cette requête basée sur la table T_Presence et la requête R_Jour affiche les noms des personnes et les jours de présence.

    Son sql:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT R_Jour.DateJ, T_Presence.Nom_Personne
    FROM R_Jour, T_Presence
    WHERE (((R_Jour.DateJ) Between [Date_Arrivée] And ([Date_Sortie]-1)));

    ---------------

    La requête qui t'intéresse:

    Cette requête affiche les effectifs par mois:

    R_MoisNbrePersonne(DateJ: Date, Nbre_Personne: Entier)
    cette requête basée sur la requête R_JourPersonne et la requête R_Jour affiche les effectifs des personnes pour chaque mois de l'année.

    Son sql:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Format([DateJ],"mm/yyyy") AS Mois, Count(R_JourPersonne.Nom_Personne) AS Nbre_Personnes
    FROM R_Jour LEFT JOIN R_JourPersonne ON R_Jour.DateJ = R_JourPersonne.DateJ
    GROUP BY Format([DateJ],"mm/yyyy");

    =====================================================

    Ou encore,
    Pour la requête qui t'intéresse:

    si les jours de présence couvre tous les mois de l'année, tu peux simplifier le tout avec cette requête:

    R_MoisNbrePersonne2(DateJ: Date, Nbre_Personne: Entier)
    cette requête basée sur la table T_Presence et la requête R_Jour affiche les effectifs des personnes pour chaque mois de l'année.

    Son sql:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Format([DateJ],"mm/yyyy") AS Mois, Count(T_Presence.Nom_Personne) AS CompteDeNom_Personne
    FROM R_Jour, T_Presence
    WHERE (((R_Jour.DateJ) Between [Date_Arrivée] And ([Date_Sortie]-1)))
    GROUP BY Format([DateJ],"mm/yyyy")
    ORDER BY Format([DateJ],"mm/yyyy");

    A+

    Note que si tu comptes le jour de sortie, tu peux remplacer dans les requêtes:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    R_Jour.DateJ Between [Date_Arrivée] And ([Date_Sortie]-1)

    par

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    R_Jour.DateJ Between [Date_Arrivée] And [Date_Sortie]


    Voici la base exemple (Format Access 2000):
    base1.zip


    ===================================================
    ===================================================

    Si tu souhaites juste calculer le nombre de personnes étant passés
    sur le chantier pour chaque mois de l'année, alors tu peux faire:


    LES REQUETES:

    R_Mois(Année: Entier, Mois: Entier)
    cette requête est basée sur la table T_Mois et affiche tous les mois de l'année accompagnée de l'année choisie, elle a comme paramètre l'année choisie:[An]

    Son sql:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PARAMETERS [An] Value;
    SELECT T_Mois.Mois, [An] AS Année
    FROM T_Mois;


    R_MoisPers(Année: Entier, Mois: Entier, Nom_Personne: Texte)
    cette requête basée sur la table T_Presence et la requête R_Mois affiche les noms des personnes et les mois de présence.

    Son sql:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT R_Mois.Année, R_Mois.Mois, T_Presence.Nom_Personne
    FROM R_Mois, T_Presence
    WHERE (((T_Presence.Date_Arrivée)<DateSerial([Année],[Mois]+1,1)) AND ((T_Presence.Date_Sortie)>DateSerial([Année],[Mois],1)));


    Enfin la requête qui t'intéresse:

    R_MoisNbrePers(Mois: Integer, Nbre_Personne: Entier)
    cette requête basée sur la requête R_MoisPers et la requête R_Mois affiche les effectifs des personnes pour chaque mois de l'année.

    Son sql:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT R_Mois.Mois, Count(R_MoisPers.Nom_Personne) AS Nbre_Personne
    FROM R_Mois LEFT JOIN R_MoisPers ON (R_Mois.Année = R_MoisPers.Année) AND (R_Mois.Mois = R_MoisPers.Mois)
    GROUP BY R_Mois.Mois
    ORDER BY R_Mois.Mois;

    Sinon il faut davantage préciser ta demande et alors on pourra adapter ces requêtes à ton problème...

    A+

Discussions similaires

  1. [Requête] Regroupement par mois en cours
    Par Burnout dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 09/01/2006, 09h36
  2. Réponses: 5
    Dernier message: 18/10/2005, 09h49
  3. Comment grouper une requête par mois ?
    Par Le Pharaon dans le forum Langage SQL
    Réponses: 6
    Dernier message: 29/06/2005, 12h01
  4. résultat d'une requete affiché par mois
    Par zorely dans le forum Langage SQL
    Réponses: 7
    Dernier message: 03/05/2004, 07h18
  5. Regroupement par mois
    Par fplanglois dans le forum SQL
    Réponses: 7
    Dernier message: 29/07/2003, 16h32

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