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

Oracle Discussion :

Requête avec Group by sur Oracle 8i


Sujet :

Oracle

  1. #1
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut Requête avec Group by sur Oracle 8i
    Bonjour,

    j'au une requéte qui fait un select de ceratines colonnes avec un appel de fonction.Et à la fin il y a un Group by.Et là puisque tous les champs présents dans le select doivent se retrouver dans le group by, je reprécise la fonction dans le group by, il me signale l'erreur :

    Erreur à la ligne 2
    ORA-00979: N'est pas une expression GROUP BY


    voici la requête :

    select pd_index,
    pd_name,
    lead_time(pd,index,pd_name) as ca from project_definition
    group by pd_name,pd_index,lead_time(pd,index,pd_name) order by pd_index;

    là lead_time() est une fonction.Et si je l'ommets de la liste Group by, çe me resignale la même errereur.

    Si quelqu'un a des solutions, aidez-moi

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    comme lead_time n'est pas une fonction d'aggregation, tu peux simplement supprimé la clause group by, non?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select  pd_index,
    pd_name,
    lead_time(pd,index,pd_name) as ca from project_definition
    order by pd_index;

  3. #3
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut

    Erreur de copier coller ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    lead_time(pd,index,pd_name)
    lead_time(pd_index,pd_name)

  4. #4
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut Requête avec group by sur oracle 8i
    Mais là, il se trouve que je reprends la requête qui a été écrite sous Sybase, et là, il y' avait un group by sur pd_name et pd_index.Donc il faut que je groupe sur ces colonnes.Je ne vois pas comment je peux grouper sur ces colonnes sans la fonction.

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par madina
    Mais là, il se trouve que je reprends la requête qui a été écrite sous Sybase, et là, il y' avait un group by sur pd_name et pd_index.Donc il faut que je groupe sur ces colonnes.Je ne vois pas comment je peux grouper sur ces colonnes sans la fonction.
    moi je ne vois pas pourquoi tu utiliserais un group by!!!

  6. #6
    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
    lead_time n'était-elle pas une fonction de regroupement sous Sybase ?

    Que fait cette fonction ?

  7. #7
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut Requête avec group by sur oracle 8i
    lead_time n'est pas une fonction de regroupemment mais plutont une fonction PL/SQL se trouvant dans la base.

  8. #8
    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
    Dans ce cas je suis d'accord avec Laurent, je ne vois pas pourquoi tu utiliserai group by. Au pire tu peux faire un select distinct.

  9. #9
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Est ce que tu as encore l'erreur ?

  10. #10
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut Requête avec group by sur oracle 8i
    Oui bien sur je pouvais me passer du Group by mais etant donné que je suis obligé de reproduire la même requête sur Syabse.Je rappelle que que dans Syabse ça été ecrit comme ça avec le group by et ça posait pas de probléme.

  11. #11
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut Requête avec group by sur oracle 8i
    oui j'ai toujours l'erreur dans les 2 cas c'est à dire quand je mets l'appel de le fonction lead_time() dans le group by, et aussi quand je l'enléve de la clause group by.

  12. #12
    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
    Que donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select distinct pd_index, pd_name,lead_time(pd_index,pd_name) as ca
    from project_definition
    order by pd_index;

  13. #13
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par madina
    Oui bien sur je pouvais me passer du Group by mais etant donné que je suis obligé de reproduire la même requête sur Syabse.Je rappelle que que dans Syabse ça été ecrit comme ça avec le group by et ça posait pas de probléme.
    pas très technique comme argumentation

    relis aussi la première réponse de McM

  14. #14
    Débutant
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Points : 106
    Points
    106
    Par défaut Requête avec group by sur oracle 8i
    Merci pour tout mais bizzarement ça donne toujours l'erreur

    ERREUR à la ligne 5 :
    ORA-00979: N'est pas une expression GROUP BY
    ORA-06512: à "SPLUS.LEADTIME_EXPOSE", ligne 82


    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
    SELECT distinct  splus.project_definition.pd_name ,
               splus.project_schedule_hypothesis.psh_startdate ,
               splus.project_schedule_hypothesis.psh_quantity ,
               splus.article_bom_schedule.abs_leadtime ,
                splus.leadtime_expose(splus.project_definition.pd_index,
    splus.project_definition.pd_name,
    splus.project_schedule_hypothesis.psh_startdate,
    splus.project_schedule_hypothesis.psh_quantity,
    splus.article_bom_schedule.abs_leadtime) as ca,
                case when abs_leadtime=null then 'Unknow' else 'Know' end  as unknow   
            FROM splus.article_bom_schedule ,
               splus.project_definition ,
               splus.currency_list currency_list_a ,
               splus.currency_list currency_list_b ,
               splus.project_schedule_hypothesis     
            WHERE ( splus.project_definition.pd_index = splus.article_bom_schedule.abs_projectid ) and          ( splus.project_definition.pd_name = splus.article_bom_schedule.abs_projectname ) and          ( splus.project_definition.pd_index = splus.project_schedule_hypothesis.psh_projectid ) and          ( splus.project_definition.pd_name = splus.project_schedule_hypothesis.psh_projectname ) and          ( splus.project_definition.pd_currency = currency_list_b.dl_symbol ) and          ( splus.article_bom_schedule.abs_currency = currency_list_a.dl_symbol ) and          ( splus.project_schedule_hypothesis.psh_startdate = splus.article_bom_schedule.abs_scheduledate ) and          ( splus.project_schedule_hypothesis.psh_quantity = splus.article_bom_schedule.abs_scheduleqty ) and          ( ( splus.project_definition.pd_index =45 ) and          ( splus.project_definition.pd_name = 'Volvo carte tuner' ) ) 
             ORDER BY splus.article_bom_schedule.abs_leadtime          DESC
    alors que là j'ai enlevé complétemment la clause Group By.
    Bien que l'ideal serait d'avoir le Group By avec ça :
    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
    SELECT  splus.project_definition.pd_name ,
     
               splus.project_schedule_hypothesis.psh_startdate ,
     
               splus.project_schedule_hypothesis.psh_quantity ,
     
               splus.article_bom_schedule.abs_leadtime ,
     
                splus.leadtime_expose(splus.project_definition.pd_index,
                                       splus.project_definition.pd_name,
                                       splus.project_schedule_hypothesis.psh_startdate,
                                        splus.project_schedule_hypothesis.psh_quantity,
                                         splus.article_bom_schedule.abs_leadtime) as ca,
     
                case when abs_leadtime=null then 'Unknow' else 'Know' end  as unknow   
            FROM splus.article_bom_schedule ,
               splus.project_definition ,
               splus.currency_list currency_list_a ,
               splus.currency_list currency_list_b ,
               splus.project_schedule_hypothesis   
              WHERE ( splus.project_definition.pd_index = splus.article_bom_schedule.abs_projectid ) and          ( splus.project_definition.pd_name = splus.article_bom_schedule.abs_projectname ) and          ( splus.project_definition.pd_index = splus.project_schedule_hypothesis.psh_projectid ) and          ( splus.project_definition.pd_name = splus.project_schedule_hypothesis.psh_projectname ) and          ( splus.project_definition.pd_currency = currency_list_b.dl_symbol ) and          ( splus.article_bom_schedule.abs_currency = currency_list_a.dl_symbol ) and          ( splus.project_schedule_hypothesis.psh_startdate = splus.article_bom_schedule.abs_scheduledate ) and          ( splus.project_schedule_hypothesis.psh_quantity = splus.article_bom_schedule.abs_scheduleqty ) and          ( ( splus.project_definition.pd_index =45 ) and          ( splus.project_definition.pd_name = 'Volvo carte tuner' ) ) 
            GROUP BY "splus"."project_definition"."pd_name" ,
               "splus"."project_definition"."pd_index" ,
               "splus"."project_schedule_hypothesis"."psh_startdate" ,
               "splus"."project_schedule_hypothesis"."psh_quantity" ,
               "splus"."article_bom_schedule"."abs_leadtime" 
             ORDER BY splus.article_bom_schedule.abs_leadtime          DESC
    Ici que j'inclus splus.leadtime_expose dans la clause Group by ou pas , il me signale toujours ORA-00979: N'est pas une expression GROUP BY

  15. #15
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    quel est a requête dans SPLUS.LEADTIME_EXPOSE à la ligne 82?

Discussions similaires

  1. Optimisation requête avec Group BY sur 600 000 lignes
    Par kimaidou dans le forum Requêtes
    Réponses: 3
    Dernier message: 05/03/2011, 13h01
  2. Requête avec variable incrémentée sur changement de clé.
    Par souellet dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/09/2005, 22h47
  3. PB avec group by sur union
    Par panini182 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/07/2005, 17h58
  4. Problème requête avec group by et distinct
    Par tomca dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/07/2005, 16h10
  5. requête avec group by
    Par Staron dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/11/2004, 16h30

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