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 :

Problème de GROUP BY TO_CHAR(date)


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Points : 67
    Points
    67
    Par défaut Problème de GROUP BY TO_CHAR(date)
    Bonjour,

    J'ai 2 soucis avec ma requête. Tout d'abord, quelqu'un peut sait-il pourquoi la requête suivante retourne le message "Not a GROUP BY expression" ?


    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
     
    PROCEDURE "RMPL_CRC_MENS_CRC4" AS
    BEGIN
        DELETE FROM APS_STAT_CRC_MENS;
        INSERT INTO APS_STAT_CRC_MENS (AS_SITE_ID,  
                                       AS_SERVICE_ID, 
                                       AS_REGION_ID, 
                                       AS_MARQUE_ID,  
                                       AS_VDN_TYPE_ID, 
                                       AS_YEAR,   
                                       AS_MONTH,
                                       AS_NB_TRAITE)
        SELECT AAS_SITE_ID, 
               SERVICE_ID, 
               REGION_ID, 
               MARQUE_ID, 
               VDN_TYPE, 
               TO_CHAR(DELIVERED_CALL_DATE, 'YYYY'),
               TO_CHAR(DELIVERED_CALL_DATE, 'MM'),
               count(*)
        FROM   APS_STAT_APPELS INNER JOIN APS_AGENT_SITE ON (IC_AGENT_ID = AAS_EMPLOYEE_ID)
        WHERE  VDN_TYPE = 'E'
        AND    VDN_ROUTE2 IS NOT NULL
        AND    IC_AGENT_ID IS NOT NULL
        AND    TRUNC(DELIVERED_CALL_DATE, 'YYYYMM') < TRUNC(SYSDATE, 'YYYYMM')
        GROUP BY TRUNC(DELIVERED_CALL_DATE, 'YYYY'), TRUNC(DELIVERED_CALL_DATE, 'MM'), AAS_SITE_ID, SERVICE_ID, REGION_ID, MARQUE_ID, VDN_TYPE
        ORDER BY TRUNC(DELIVERED_CALL_DATE), TRUNC(DELIVERED_CALL_DATE), AAS_SITE_ID, SERVICE_ID, REGION_ID, MARQUE_ID, VDN_TYPE;
     
        COMMIT;
     
        EXCEPTION
        WHEN OTHERS THEN
            dbms_output.PUT_LINE( 'Code    erreur : ' || to_char( SQLCODE ));
            dbms_output.PUT_LINE( 'libellé erreur : ' || to_char( SQLERRM ));
    END;

    Et ensuite, pourquoi la requête fonctionne avec la ligne écrite en vert et pas celle écrite en rouge?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT AAS_SITE_ID, 
               SERVICE_ID, 
               REGION_ID, 
               MARQUE_ID, 
               VDN_TYPE, 
               DELIVERED_CALL_DATE
    FROM   APS_STAT_APPELS INNER JOIN APS_AGENT_SITE ON (IC_AGENT_ID = AAS_EMPLOYEE_ID)
        WHERE  VDN_TYPE = 'E'
        AND    VDN_ROUTE2 IS NOT NULL
        AND    IC_AGENT_ID IS NOT NULL
        AND    TO_NUMBER(TO_CHAR(DELIVERED_CALL_DATE, 'YYYYMM')) < TO_NUMBER(TO_CHAR(SYSDATE, 'YYYYMM'))
        AND    TRUNC(DELIVERED_CALL_DATE, 'YYYYMM') < TRUNC(SYSDATE, 'YYYYMM')
    Merci

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    l'erreur c'est parce que tu mets TRUNC au lieu de TO_CHAR comme dans le SELECT dans le GROUP BY (t'as changé d'avis en cours de route ? )

    Et qu'est ce qui ne marche pas avec la ligne rouge ?

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Points : 67
    Points
    67
    Par défaut
    Le TO_CHAR et le TRUNC, c'est une erreur de recopie. Mais même avec TO_CHAR dans le GROUP BY sans préfixe, ça ne fonctionne pas... Donc, en préfixant tous les champs et en respectant le format des dates, cela fonctionne...
    Pourtant il n'y a aucun champ en commun dans les 2 tables ????

    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
     
    SELECT aas.AAS_SITE_ID, 
               asa.SERVICE_ID, 
               asa.REGION_ID, 
               asa.MARQUE_ID, 
               asa.VDN_TYPE, 
               TO_CHAR(asa.DELIVERED_CALL_DATE, 'YYYY') annee,
               TO_CHAR(asa.DELIVERED_CALL_DATE, 'MM') mois,
               count(*)
        FROM   APS_STAT_APPELS asa INNER JOIN APS_AGENT_SITE aas ON (asa.IC_AGENT_ID = aas.AAS_EMPLOYEE_ID)
        WHERE  asa.VDN_TYPE = 'E'
        AND    asa.VDN_ROUTE2 IS NOT NULL
        AND    asa.IC_AGENT_ID IS NOT NULL
        AND    TO_NUMBER(TO_CHAR(DELIVERED_CALL_DATE, 'YYYYMM')) < TO_NUMBER(TO_CHAR(SYSDATE, 'YYYYMM'))
        GROUP BY TO_CHAR(asa.DELIVERED_CALL_DATE, 'YYYY'), TO_CHAR(asa.DELIVERED_CALL_DATE, 'MM'),               aas.AAS_SITE_ID, asa.SERVICE_ID, asa.REGION_ID, asa.MARQUE_ID, asa.VDN_TYPE
        ORDER BY TO_NUMBER(annee), TO_NUMBER(mois), aas.AAS_SITE_ID, asa.SERVICE_ID, asa.REGION_ID, asa.MARQUE_ID, asa.VDN_TYPE;
    Par contre, je suis obligé d'utiliser la ligne en vert (voir post précédent) car la rouge ne fonctionne toujours pas...
    J'ai l'erreur suivante :
    ORA-01898 - While trying to truncate or round dates, extra data was found in the date format picture

    Pourtant le champ est du type date...

  4. #4
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    TRUNC(sysdate, 'YYYYMM') ne peut pas fonctionner. Pour tronquer au mois :
    TRUNC(sysdate, 'MM') :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SQL> select trunc(sysdate, 'MM') from dual;
    TRUNC(SY
    --------
    01/06/08
    Pour l'erreur "not a group by expression", c'est parce que les autres colonnes (aas.AAS_SITE_ID, asa.SERVICE_ID, asa.REGION_ID, asa.MARQUE_ID, asa.VDN_TYPE) ne sont pas dans la clause group by.

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Points : 67
    Points
    67
    Par défaut
    Je souhaite faire un TRUNC sur le mois et l'année et non seulement sur l'année.
    Quand à la clause GROUP BY, son schéma est correct puisque je reprend bien tout les champs qui sont dans le SELECT.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par cgone Voir le message
    Je souhaite faire un TRUNC sur le mois et l'année et non seulement sur l'année.
    relis le message de PlaineR juste au dessus !

  7. #7
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par cgone Voir le message
    Je souhaite faire un TRUNC sur le mois et l'année et non seulement sur l'année.
    Relis mon post précédent

    Citation Envoyé par cgone Voir le message
    Quand à la clause GROUP BY, son schéma est correct puisque je reprend bien tout les champs qui sont dans le SELECT.
    Exact, c'est dans le order by qu'est le problème

  8. #8
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Points : 67
    Points
    67
    Par défaut
    OK, j'avais mal interprêté ce que plaineR disait

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

Discussions similaires

  1. Problème avec group by...
    Par gdido dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 30/07/2005, 10h34
  2. [débutant] problème avec Group by
    Par Amenofis dans le forum Débuter
    Réponses: 5
    Dernier message: 25/05/2005, 10h57
  3. Problème de select sur une date (DATETIME....)
    Par zeldoi5 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 16/05/2005, 12h19
  4. Problème de reqûete sur la date, année et mois en cours
    Par Jean-Marc dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/02/2004, 17h36
  5. Réponses: 9
    Dernier message: 17/01/2004, 11h51

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