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

SQL Oracle Discussion :

Calculer les congés des agents


Sujet :

SQL Oracle

  1. #1
    Provisoirement toléré
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Points : 76
    Points
    76
    Par défaut Calculer les congés des agents
    salut tout le monde

    je veux que les agents qui ont pris congé en 2013 par exemple 1154 a pris 10 alors reliquat égale 20 mais dans l'exercice 2012 reliquat 30 car il a pas pris congé

    table récap

    matricule , pris , exercice
    1154 10 2013

    table agent 2013

    matricule nom
    1154 david
    4444 mino
    4687 mour

    problème que si je veux afficher reliquat des agent en 2012 alors agent 1154 n’affiche pas

    le résultat de la requête exercice 2012 ça donne
    4444 30
    4687 30
    mais n'affiche pas agent 1154 qui a aussi 30
    je vous montre ma requête
    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
     
    SELECT h.agt_matricule,
           h.agt_nom ,
           CASE
             WHEN 30 - SUM(t.pris) IS NULL THEN
              30
             ELSE
              30 - SUM(t.pris)
           end david
       FROM récap t, h_agent h, h_fonctions, h_structures
       WHERE t.matricule(+) = h.agt_matricule
       and h.agt_cstruct = h_structures.str_cstruct
       and h.agt_cfonction = h_fonctions.fct_cfonction
       and h.agt_oper = '1'
       AND (t.exercice = 2012 OR t.exercice IS NULL)
       and h.agt_matricule='11900F'
       GROUP BY h.agt_matricule,
              h.agt_nom,
             t.exercice
              HAVING 30-SUM(t.pris) > 0
    merci d'avance

  2. #2
    Membre régulier
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 19
    Points : 108
    Points
    108
    Par défaut
    Bonjour.

    Alors je vais essayer de vous fournir une réponse mais je pense que votre soucis ne provient pas forcement de votre requête SQL mais plus de votre jeu de données.

    Je m'explique...

    Si nous prenons le jeu de données que vous avez fournit (qui au passage n'est pas complet par rapport à votre requête, mais ce n'est pas grave... pour l'instant )
    soit les tables AGENT et RECAP

    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
     
    with 
    AGENT as
    (
          SELECT 1154 matricule, 'david' nom FROM DUAL UNION ALL
          SELECT 4444 matricule, 'mino' nom FROM DUAL UNION ALL
          SELECT 4687 matricule, 'mour' nom FROM DUAL
    ),
    RECAP as 
    (
        SELECT 1154 matricule ,  0 pris , 2012 exercice FROM DUAL UNION ALL
        SELECT 1154 matricule , 10 pris , 2013 exercice FROM DUAL
    )
    SELECT a.matricule, a.nom, d.exercice, 30 - SUM(d.pris) reliquat
    FROM AGENT a
    LEFT OUTER JOIN RECAP d
         ON d.matricule = a.matricule
    WHERE nvl(d.exercice, 2012) = 2012
    GROUP BY a.matricule, a.nom, d.exercice;
    Nous obtenons le résultat suivant :
    MATRICULE NOM EXERCICE RELIQUAT
    ---------- ----- ---------- ----------
    4687 mour
    4444 mino
    1154 david 2012 30

    En enlevant le filtre sur l'exercice, nous obtenons
    MATRICULE NOM EXERCICE RELIQUAT
    ---------- ----- ---------- ----------
    4687 mour
    4444 mino
    1154 david 2012 30
    1154 david 2013 20

    Donc soit vous avez un soucis dans vos jointures (ou vos données)
    => jointures fermées avec les tables h_fonctions et h_structures

    Je vous conseille donc d'épurer votre requête afin de garder uniquement les données "comptables" puis d'y ajouter les tables satellites afin de trouver celle qui vous pollue.

    Si

Discussions similaires

  1. Les communications des agents JADE
    Par Djug dans le forum Programmation par agent
    Réponses: 246
    Dernier message: 06/06/2015, 11h13
  2. calculer les valeurs des directives en php.ini
    Par erman_yazid dans le forum Langage
    Réponses: 2
    Dernier message: 22/05/2008, 10h58
  3. Calculer les équations des plans du Frustum et clipping
    Par kiroukou dans le forum Moteurs 3D
    Réponses: 7
    Dernier message: 16/01/2007, 14h54

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