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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    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
    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 confirmé

    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
    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
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    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
    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
    Par défaut
    lead_time n'était-elle pas une fonction de regroupement sous Sybase ?

    Que fait cette fonction ?

  7. #7
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    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
    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
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    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

  10. #10
    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
    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