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 :

Not a GROUP BY expression


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut Not a GROUP BY expression
    Bonjour,

    J'ai deux serveur oracle, sur l'un ma requête fonctionne correctement, sur l'autre oracle me renvoi une erreur ORA-00979: not a GROUP BY expression.

    Personnellement je ne vois aucun problème au niveau d'un de mes group by. La seule différence entre les deux serveur est la version. Celui sur lequel la requête s'exécute est en version Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod. Celui sur lequel oracle me renvoie l'erreur est en version Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod.

    L'autre différence entre les deux serveurs est le contenu de la base mais je ne vois pas comment je pourrais avoir une erreur de group by du au contenu de la base...

    Ci-dessous la requête concerné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 ORGANIZATIONID,
           DAYPART,
           SUM(PRDNETSALES) PRDNETSALES,
           100/(SUBDLYGST.NETSLS/DECODE(SUM(PRDNETSALES),0,1,SUM(PRDNETSALES))) PRDNETRATE,
           SUM(PRDGROSSSALES) PRDGROSSSALES,
           100/(SUBDLYGST.GROSSSLS/DECODE(SUM(PRDGROSSSALES),0,1,SUM(PRDGROSSSALES))) PRDGROSSRATE,
           SUM(PRDGUESTS) PRDGUESTS,
           100/(SUBDLYGST.NUMGUESTS/DECODE(SUM(PRDGUESTS),0,1,SUM(PRDGUESTS))) PRDGUESTSRATE,
           SUM(PRDNETSALES)/SUM(PRDGUESTS) PRDNETTM,
           SUM(PRDGROSSSALES)/SUM(PRDGUESTS) PRDGROSSTM,
           TRUNC(AVG(PRDDININGTIME),0) PRDAVGDININGTIME
    FROM (SELECT    ORGANIZATIONID,
                    CASE 
                        WHEN    FIXEDPERIOD BETWEEN 25 AND 62 THEN 
                                CASE
                                    WHEN (TO_CHAR (BUSINESSDATE,'DY') IN ('MON','TUE','WED','THU','FRY')) OR
                                         (TO_CHAR (BUSINESSDATE,'DY') IN ('LUN.','MAR.','MER.','JEU.','VEN.')) THEN 'Midi Semaine' ELSE 'Midi Week End'
                                END        
                        WHEN    FIXEDPERIOD BETWEEN 63 AND 72 THEN 
                                CASE
                                    WHEN (TO_CHAR (BUSINESSDATE,'DY') IN ('MON','TUE','WED','THU','FRY')) OR
                                         (TO_CHAR (BUSINESSDATE,'DY') IN ('LUN.','MAR.','MER.','JEU.','VEN.')) THEN 'Après Midi Semaine' ELSE 'Après Midi Week End'
                                END
                        WHEN    (FIXEDPERIOD BETWEEN 73 AND 96) OR 
                                (FIXEDPERIOD BETWEEN 1 AND 24) THEN 
                                CASE
                                    WHEN (TO_CHAR (BUSINESSDATE,'DY') IN ('MON','TUE','WED','THU','FRY')) OR
                                         (TO_CHAR (BUSINESSDATE,'DY') IN ('LUN.','MAR.','MER.','JEU.','VEN.')) THEN 'Soir Semaine' ELSE 'Soir Week End'
                                END
                    END DAYPART, 
                    NETSALESTOTAL PRDNETSALES,
                    NETSALESTOTAL - DISCOUNTTOTAL PRDGROSSSALES,
                    NUMGUESTS PRDGUESTS,
                    DININGTIME/60 PRDDININGTIME  
        FROM OPERATIONS_FIXED_PERIOD_TOTAL OFPT
        WHERE ORGANIZATIONID = 10001
            AND BUSINESSDATE = '12-nov-09'
            AND LOCATIONID = 2043 ) SUBMAIN,
            (SELECT SUM(NUMGUESTS) NUMGUESTS,
                     SUM(DISCOUNTTOTAL) DSCTTL,
                     NVL(SUM(NETSALESTOTAL),0) NETSLS,
                     NVL(SUM(NETSALESTOTAL) - SUM(DISCOUNTTOTAL),0) GROSSSLS
             FROM OPERATIONS_FIXED_PERIOD_TOTAL
             WHERE ORGANIZATIONID = 10001
                AND LOCATIONID = 2043
                AND BUSINESSDATE = '12-nov-09') SUBDLYGST 
    GROUP BY    ORGANIZATIONID,
                DAYPART,
                SUBDLYGST.NETSLS,
                SUBDLYGST.GROSSSLS,
                SUBDLYGST.NUMGUESTS
    Je précise que j'ai testé les deux sous requêtes subdlygst et submain individuellement et que je n'ai pas d'erreur de group by... théoriquement le souci viendrait donc de la requête principale...

    Merci d'avance pour votre aide.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 135
    Par défaut
    essais ceci

    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
    53
    54
     
    Select ORGANIZATIONID,  DAYPART, PRDNETSALES, PRDGROSSSALES,
           PRDGUESTS,
     100/(SUBDLYGST.NETSLS/DECODE(PRDNETSALES,0,1,PRDNETSALES))  PRDNETRATE,
     100/(SUBDLYGST.GROSSSLS/DECODE(PRDGROSSSALES,0,1,PRDGROSSSALES))    PRDGROSSRATE,
           100/(SUBDLYGST.NUMGUESTS/DECODE(PRDGUESTS,0,1,PRDGUESTS)) PRDGUESTSRATE,
           PRDNETSALES/PRDGUESTS PRDNETTM,
           PRDGROSSSALES/PRDGUESTS PRDGROSSTM,
           TRUNC(PRDDININGTIME,0) PRDAVGDININGTIME
    From
    (SELECT ORGANIZATIONID,
           DAYPART,
           SUM(PRDNETSALES) PRDNETSALES,
           SUM(PRDGROSSSALES) PRDGROSSSALES,
           SUM(PRDGUESTS) PRDGUESTS,
           AVG(PRDDININGTIME) PRDDININGTIME
           FROM (SELECT    ORGANIZATIONID,
                    CASE 
                        WHEN    FIXEDPERIOD BETWEEN 25 AND 62 THEN 
                                CASE
                                    WHEN (TO_CHAR (BUSINESSDATE,'DY') IN ('MON','TUE','WED','THU','FRY')) OR
                                         (TO_CHAR (BUSINESSDATE,'DY') IN ('LUN.','MAR.','MER.','JEU.','VEN.')) THEN 'Midi Semaine' ELSE 'Midi Week End'
                                END        
                        WHEN    FIXEDPERIOD BETWEEN 63 AND 72 THEN 
                                CASE
                                    WHEN (TO_CHAR (BUSINESSDATE,'DY') IN ('MON','TUE','WED','THU','FRY')) OR
                                         (TO_CHAR (BUSINESSDATE,'DY') IN ('LUN.','MAR.','MER.','JEU.','VEN.')) THEN 'Après Midi Semaine' ELSE 'Après Midi Week End'
                                END
                        WHEN    (FIXEDPERIOD BETWEEN 73 AND 96) OR 
                                (FIXEDPERIOD BETWEEN 1 AND 24) THEN 
                                CASE
                                    WHEN (TO_CHAR (BUSINESSDATE,'DY') IN ('MON','TUE','WED','THU','FRY')) OR
                                         (TO_CHAR (BUSINESSDATE,'DY') IN ('LUN.','MAR.','MER.','JEU.','VEN.')) THEN 'Soir Semaine' ELSE 'Soir Week End'
                                END
                    END DAYPART, 
                    NETSALESTOTAL PRDNETSALES,
                    NETSALESTOTAL - DISCOUNTTOTAL PRDGROSSSALES,
                    NUMGUESTS PRDGUESTS,
                    DININGTIME/60 PRDDININGTIME  
        FROM OPERATIONS_FIXED_PERIOD_TOTAL OFPT
        WHERE ORGANIZATIONID = 10001
            AND BUSINESSDATE = '12-nov-09'
            AND LOCATIONID = 2043 ) SUBMAIN,
            (SELECT SUM(NUMGUESTS) NUMGUESTS,
                     SUM(DISCOUNTTOTAL) DSCTTL,
                     NVL(SUM(NETSALESTOTAL),0) NETSLS,
                     NVL(SUM(NETSALESTOTAL) - SUM(DISCOUNTTOTAL),0) GROSSSLS
             FROM OPERATIONS_FIXED_PERIOD_TOTAL
             WHERE ORGANIZATIONID = 10001
                AND LOCATIONID = 2043
                AND BUSINESSDATE = '12-nov-09') SUBDLYGST 
    GROUP BY    ORGANIZATIONID,
                DAYPART
    ) TEST

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    Très bizarre...

    Lorsque j'exécute ma sous requête submain individuellement elle fonctionne parfaitement.

    Lorsque je commente la colonne daypart dans le group by et dans le select de la requete principale ma requête fonctionne correctement

    C'est quoi ce délire ???
    J'ai l'impression que le problème vient de près ou de loin du case when mais alors pourquoi la sous-requête s'exécuterait correctement ??? j'y comprend rien

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    merci teach.

    Je n'ai pas encore regardé ta modif en détails mais j'ai fait un copier/coller de ta requete tel quel et oracle me renvoie ORA-00904: "SUBDLYGST"."NUMGUESTS": invalid identifier

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    ha bah oui c'est normal car maintenant ma sous requete SUBDLYGST descend d'un niveau a cause de la sous requete TEST du coup elle n'est plus accessible par la requete principale.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Par défaut
    je crois que j'avais un peu saisis le sens de ta modif du coup j'ai rajouté une requête qui englobait toutes les autres et qui contenait tous mes sum(), la requête directement parente de celle contenant le case when ne contenant ainsi plus de sum mais c'est pareil...

  7. #7
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 76
    Par défaut
    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
    WITH t AS
    (
    SELECT 1 AS id,'id1' AS libelle, NULL AS pere FROM dual union ALL
    SELECT 2 ,'id2' , 1 FROM dual union ALL
    SELECT 3 ,'id2' , 1 FROM dual union ALL
    SELECT 4 ,'id4' , NULL FROM dual
    )
    select libelle,id from t
    group by libelle
     
     
    WITH t AS
    (
    SELECT 4 as id,'id4' as libelle, NULL FROM dual
    )
    select libelle,id from t
    group by libelle
    Le contenu des tables est très important.
    Ma premiere requete plante. pas la seconde.
    Une des deux bases n'est pas vide?

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

Discussions similaires

  1. ORA-00979: not a GROUP BY expression
    Par Oratorio dans le forum Oracle
    Réponses: 6
    Dernier message: 16/11/2012, 09h21
  2. ORA-00979:not a GROUP BY expression
    Par kodo dans le forum SQL
    Réponses: 2
    Dernier message: 16/12/2010, 18h11
  3. not a group by expression
    Par pseudobidon57 dans le forum SQL
    Réponses: 2
    Dernier message: 15/04/2007, 00h53
  4. ORA-00979: not a GROUP BY expression
    Par Wurlitzer dans le forum Oracle
    Réponses: 13
    Dernier message: 01/02/2007, 12h19
  5. Erreur ORA-00979 : not a GROUP BY expression sur Oracle9i
    Par Dirty Henry dans le forum Oracle
    Réponses: 9
    Dernier message: 21/10/2005, 14h23

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