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 :

GroupBy, Decode et Case


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 5
    Par défaut GroupBy, Decode et Case
    Bonjour,

    J'ai un problème sur une requête SQL.

    Voici la 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    SELECT
      T_CMP_TYPE_INDIC.ROUTAGE,
      T_INDIC.VAL_INDIC,
      T_FLUX.ID_MODE,
      T_INDIC.LIB_ACD,
      T_INDIC.ACD,
      DECODE(T_TYPE_INDIC.LIB_TYPE_INDIC,'Sortants DAC',CASE WHEN T_FLUX.FLUX IN (SELECT T_FLUX.FLUX FROM T_FLUX WHERE T_FLUX.TYPE_INDIC_AUTRES=1) THEN 'Sortants Otres' ELSE 'Sortants DhAC' END,T_TYPE_INDIC.LIB_TYPE_INDIC),
      T_TYPE_INDIC.TYPE_INDIC,
      T_TYPE_INDIC.AVEC_SEUIL_1,
      T_TYPE_INDIC.AVEC_SEUIL_2,
      sum(T_INDIC.SEUIL_1_DEPASSE),
      sum(T_INDIC.SEUIL_2_DEPASSE),
      avg(T_INDIC.SEUIL_1),
      avg(T_INDIC.SEUIL_2),
      T_CMP_TYPE_INDIC.ORD_AFF,
      T_FLUX.GROUP_FLUX,
      T_INDIC.FLUX
    FROM   
    T_INDIC,
    T_FLUX,
    T_TYPE_INDIC,
    T_CMP_TYPE_INDIC
    WHERE
      ( T_CMP_TYPE_INDIC.TYPE_INDIC=T_TYPE_INDIC.TYPE_INDIC  )
      AND  ( nvl(T_CMP_TYPE_INDIC.ID_MODE,'#')=nvl(T_INDIC.ID_MODE,'#') and nvl(T_CMP_TYPE_INDIC.ROUTAGE,'#')=nvl(T_INDIC.ROUTAGE,'#') and nvl(T_CMP_TYPE_INDIC.TYPE_INDIC,'#')=nvl(T_INDIC.TYPE_INDIC,'#')  )
      AND  ( T_FLUX.FLUX=T_INDIC.FLUX and T_FLUX.ID_MODE=T_INDIC.ID_MODE  )
    GROUP BY 
      T_CMP_TYPE_INDIC.ROUTAGE,
      T_INDIC.VAL_INDIC,
      T_FLUX.ID_MODE,
      T_INDIC.LIB_ACD,
      T_INDIC.ACD,
    DECODE(T_TYPE_INDIC.LIB_TYPE_INDIC,'Sortants DAC',CASE WHEN T_FLUX.FLUX IN (SELECT T_FLUX.FLUX FROM T_FLUX WHERE T_FLUX.TYPE_INDIC_AUTRES=1) THEN 'Sortants Otres' ELSE 'Sortants DhAC' END,T_TYPE_INDIC.LIB_TYPE_INDIC),
      T_TYPE_INDIC.TYPE_INDIC,
      T_TYPE_INDIC.AVEC_SEUIL_1,
      T_TYPE_INDIC.AVEC_SEUIL_2,
      T_CMP_TYPE_INDIC.ORD_AFF,
      T_FLUX.GROUP_FLUX,
      T_INDIC.FLUX;
    Cette requête me renvoie ORA-00979: not a GROUP BY expression

    Lorsque j'enlève le passage en rouge, plus de problème,
    DONC, tout laisse à penser que le problème vient de là...
    don't you?

    Merci de votre aide.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 5
    Par défaut
    Solution donnée par un internaute :

    toutes les colonnes utilisées dans la clause DECODE doivent être présentes dans la partie GROUP BY.
    Pour T_FLUX.FLUX ce n'était pas le cas car lorsqu'on fait une jointure, il faut que le colonne utilisée dans DECODE se retrouve exactement (i.e. même table!) dans la clause GROUP BY.

    ==> T.INDIC.FLUX ne couvre pas T_FLUX.FLUX ci-dessus !

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

Discussions similaires

  1. order by decode ou case
    Par Marcel Chabot dans le forum PL/SQL
    Réponses: 6
    Dernier message: 03/06/2010, 16h30
  2. decode avec case
    Par moulery dans le forum SQL
    Réponses: 3
    Dernier message: 29/02/2008, 11h37
  3. [Oracle8i]Performances CASE, DECODE
    Par Drizzt [Drone38] dans le forum Oracle
    Réponses: 6
    Dernier message: 27/03/2007, 16h42
  4. Probleme Convertir Case en decode
    Par moulery dans le forum SQL
    Réponses: 4
    Dernier message: 28/02/2007, 16h55
  5. [SQL] performances Decode ou Case when ?
    Par Yorglaa dans le forum Oracle
    Réponses: 8
    Dernier message: 01/10/2004, 15h50

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