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

WinDev Discussion :

Requête pour calculer l'effectif par fonction et par Equipe


Sujet :

WinDev

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 136
    Points : 36
    Points
    36
    Par défaut Requête pour calculer l'effectif par fonction et par Equipe
    Bonjour,

    j'ai une table (Personnel) qui contient la liste du personnel (Matricule, Nom&Prénom, Code Fonction, Équipe, Statut), et une table (Fonction) avec (Code_fonction, libellé).

    pour l'équipe c'est une combo qui a deux équipe (A et B). et pour Statut (en fonction, retraité, détaché, ...etc)

    je veux extraire à partir de la table personnel, l'effectif total par Équipe et par fonction selon le statut qui est égale à 1 (en fonction).

    Nom : effectif.jpg
Affichages : 376
Taille : 31,3 Ko

    J'ai essayé cette requête:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT Libellé_fonction,COUNT (Personnel.code_fontion) Effectif
    FROM Personnel, Fonction_Personnel
    WHERE Personnel.code_fontion = Fonction_Personnel.code_fontion AND Equipe = {param1} AND Statut = 1
    GROUP BY Fonction_Personnel.Libellé_fonction,Personnel.code_fontion
    ça marche juste pour une seule équipe, et le remplissage de la table mémoire se fait en parcourant la requête.

    Avez vous une idée, comment avoir l'effectif pour les deux équipes ?

    Merci et à bientôt.

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Citation Envoyé par compteabdou Voir le message
    .....
    Merci et à bientôt.
    De rien et à bientôt,

    Hemgé

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 136
    Points : 36
    Points
    36
    Par défaut
    des idées .... ?

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonsoir,


    Mon message précédent était une réaction au fait que vous ne posiez aucune question, ne soumettiez aucune esquisse de code ou de solution.
    Notamment pas votre requête, ni le commentaire qui la suit.

    Il est difficile de suivre votre sujet si vous modifiez des messages antérieurs aux réponses qui vous ont été faites, lesquelles perdent alors leur sens.
    Par ailleurs, compléter un message pour "gommer" le point sur lequel on a voulu attirer votre attention n'est pas un comportement très courtois.

    Hemgé

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Maintenant qu'on a la requête, on peut apporter un élément de réponse.
    Un premier problème dans cette requête est que tu appliques une fonction d'agrégation sur une colonne qui est dans la clause GROUP BY.
    C'est l'un ou l'autre... Ici tu comptes le nombre de fonction par équipe.

    Tatayo.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 136
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par Hemgé Voir le message
    Bonsoir,
    Mon message précédent était une réaction au fait que vous ne posiez aucune question, ne soumettiez aucune esquisse de code ou de solution.
    Hemgé
    Vous avez raison, il fallait que je mette la modification dans une nouvelle réponse.

    Pour la requête, le calcul de l'effectif doit se faire pour l'équipe A et B donc j'ai besoin de trois colonnes (Fonction, Effectif A, Effectif B).
    mais je ne trouve pas l'astuce pour faire le calcul.
    dans ma table personnel, la colonne équipe contient (1 ou 2).
    est ce qu'il y a la possibilité de faire un test sur l'équipe puis incrémenter l'effectif par fonction.

    Concernant la fonction d'agrégation qui est dans la clause GROUP BY, c'est dans l'éditeur de la requête, j'ai eu un message disant que je doit ajouter la colonne dans GROUP BY.

  7. #7
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Bonjour

    Idem que tatayo : "Personnel.code_fontion" ne doit pas être dans le GROUP BY

  8. #8
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 136
    Points : 36
    Points
    36
    Par défaut
    Bonjour,

    J'ai enlevé la rubrique code_fonction du GROUP BY, le résultat est le même.
    j'ai essayé d'écrire cette requête mais ça ne marche pas:

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Libellé_fonction,SUM (IF Personnel.Equipe = 1 THEN 1 ELSE 0) Effectif_A, SUM (IF Personnel.Equipe = 2 THEN 1 ELSE 0) Effectif_B
    FROM Personnel, Fonction_Personnel
    WHERE Personnel.code_fonction = Fonction_Personnel.code_fonction AND Statut = 1
    GROUP BY Fonction_Personnel.Libellé_fonction

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Citation Envoyé par compteabdou Voir le message
    j'ai essayé d'écrire cette requête mais ça ne marche pas:
    On est sensé deviner ce qui se cache derrière "ça ne marche pas" ?

    Tatayo.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 136
    Points : 36
    Points
    36
    Par défaut
    un message apparait: Mot IF inattendu

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    En SQL il faut utiliser un CASE WHEN dans ce cas. Reste à voir ce que HF accepte dans les requêtes SQL.

    Tatayo.

  12. #12
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 136
    Points : 36
    Points
    36
    Par défaut
    Merci à vous, je vais voir comment utiliser CASE WHEN avec HF.

  13. #13
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Sinon il y aussi DECODE

  14. #14
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 136
    Points : 36
    Points
    36
    Par défaut
    Bonjour,

    j'ai essayé à utiliser CASE WHEN THEN, DECODE, et aussi ABS. les trois marchent bien.

    Problème résolu.

    Merci.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/08/2009, 09h53
  2. Réponses: 5
    Dernier message: 26/11/2008, 20h05
  3. [Oracle10g] Requête pour calcul de cumul
    Par thewarlock dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/10/2008, 09h31
  4. Requête pour calculer le nombre de ligne
    Par salsero1 dans le forum SQL
    Réponses: 1
    Dernier message: 25/04/2008, 12h05
  5. Requête pour calculer le temps entre deux dates
    Par Badboy62cfp dans le forum Access
    Réponses: 2
    Dernier message: 19/05/2006, 13h50

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