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 :

pb avec Decode, group by


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Par défaut pb avec Decode, group by
    J'ai une requete qui est sensée afficher les remunerations théoriques pour chaque matricule par année en différenciant les catégories(soit "c", soit "e") des matricules.

    La requete fonctionne correctement si je mets un numéro de matricule comme critere par contre elle ne fonctionne plus si je demande à afficher tous les matricules....

    Voici une partie de ma requete (pour l'année 2007) en sachant que j'ai des unions pour chaque année!

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    SELECT DISTINCT
           s.Sal_Noss,
           Cs.Sal_Matr AS Matricule,
           (To_Date('30/12/1899', 'DD/MM/YYYY') + Cs.Pot_Du + 2) AS Appo,
           MAX(Cs.Pot_Val) OVER (PARTITION BY s.Sal_Noss, Cs.Sal_Matr, (To_Date('30/12/1899', 'DD/MM/YYYY') + Cs.Pot_Du + 2)) AS Remu_Theo_Base,
           Decode(FIRST_VALUE(h.Cat_Id) OVER (ORDER BY To_Date('30/12/1899', 'DD/MM/YYYY') + h.Hca_Date + 2 DESC), 'C',Cs.Pot_Val) AS Remu_Theo_Cadre_13
         ,Decode(FIRST_VALUE(h.Cat_Id) OVER (ORDER BY To_Date('30/12/1899', 'DD/MM/YYYY') + h.Hca_Date + 2 DESC), 'E',Cs.Pot_Val) AS Remu_Theo_Etam_13
    ,'31/12/' || (To_Char(SYSDATE, 'yyyy')) AS Temps_Id 
     
     
    FROM   Salarie   s,
           Const_Sal Cs,
           h_Categ   h
    WHERE  (To_Date('30/12/1899', 'DD/MM/YYYY') + h.Hca_Date + 2) <=
           To_Date('31/12/' || (To_Char(SYSDATE, 'yyyy')), 'DD/MM/YYYY')
    AND    h.Sal_Matr = s.Sal_Matr
    AND    Cs.Arc_Id = 'APPO'
    AND    s.Sal_Matr = Cs.Sal_Matr
    AND    Cs.Mon_Id = 'EUR'
    AND    (Cs.Pot_Du) =
           (SELECT MAX(Appo.Pot_Du)
             FROM   Const_Sal Appo
             WHERE  Appo.Arc_Id = 'APPO'
             AND    Appo.Mon_Id = 'EUR'
             AND    Appo.Sal_Matr = Cs.Sal_Matr
             AND    (To_Date('30/12/1899', 'DD/MM/YYYY') + Appo.Pot_Du + 2) <=
                    To_Date('31/12/' || (To_Char(SYSDATE, 'yyyy')), 'DD/MM/YYYY'))
    AND    --Cs.Sal_Matr NOT IN
           NOT EXISTS
     (SELECT 1
            FROM   Const_Sal Cs1
            WHERE  Cs.Sal_Matr = Cs1.Sal_Matr
            AND    Cs1.Arc_Id = 'OBAN'
            AND    (To_Date('30/12/1899', 'DD/MM/YYYY') + Pot_Du + 2) <=
                   To_Date('31/12/' || (To_Char(SYSDATE, 'yyyy')), 'DD/MM/YYYY'))
    AND    -- Cs.Sal_Matr NOT IN
           NOT EXISTS
     (SELECT 1
            FROM   Ccmx.h_Es_Sauv Hs
            WHERE  Cs.Sal_Matr = Hs.Sal_Matr
            AND    To_Date('30/12/1899', 'DD/MM/YYYY') + Hs.e_s_Dates + 2 <=
                   ('31/12/' || (To_Char(SYSDATE, 'yyyy')))
            AND    Hs.Mes_Ids IN
                   ('RS', 'LG', 'RA', 'LE', 'FX', 'DE', 'CN', 'LL', 'LF', 'LI', 'LM', 'RG', 'AU', 'LC', 'DM', 'LA', 'FD', 'RT', 'ES', 'RC', 'RE', 'EE', 'FS')
            UNION ALL
            SELECT 1
            FROM   Ccmx.h_Es h
            WHERE  h.Sal_Matr = Cs.Sal_Matr
            AND    To_Date('30/12/1899', 'DD/MM/YYYY') + e_s_Dates + 2 <=
                   ('31/12/' || (To_Char(SYSDATE, 'yyyy')))
            AND    h.Mes_Ids IN
                   ('RS', 'LG', 'RA', 'LE', 'FX', 'DE', 'CN', 'LL', 'LF', 'LI', 'LM', 'RG', 'AU', 'LC', 'DM', 'LA', 'FD', 'RT', 'ES', 'RC', 'RE', 'EE', 'FS'))
    Je pense que l'on peut faire un group by mais ca ne fonctionne pas avec les fonctions analytiques ...

    Voici un extrait de ce que j'obtiens avec cette requete:

    SAL_NOSS MATRICULE APPO REMU_THEO_BASE REMU_THEO_CADRE_13 REMU_THEO_ETAM_13 TEMPS_ID
    123 646 2006/10/01 1700 1700 31/12/2007
    456 63 2007/10/01 2270 2270 31/12/2007
    789 141 2007/09/01 2060 2060 31/12/2007
    pour le 1er, normalement le 1700 va dans REMU_THEO_ETAM-13 et non REMU_THEO_CADRE_13

  2. #2
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    236
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 236
    Par défaut
    J'ai resolu mon pb...En fait ca vient de la fonction analytique...
    Il fallait mettre un "partition by"...ce qui est logique!

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

Discussions similaires

  1. [SQL] update avec decode
    Par jojo22222 dans le forum Oracle
    Réponses: 8
    Dernier message: 04/01/2006, 17h50
  2. Quel resultat avec un group by pour plusieurs valeurs?
    Par sampq dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/12/2005, 12h08
  3. [CR8.5] Chevauchement de champs avec des groupes
    Par kikidrome dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 11/10/2005, 22h50
  4. requete avec jointure & group by
    Par de LANFRANCHI dans le forum Langage SQL
    Réponses: 9
    Dernier message: 27/07/2004, 14h31
  5. problème avec un GROUP BY
    Par Vermin dans le forum Requêtes
    Réponses: 4
    Dernier message: 30/03/2004, 14h44

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