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

PHP & Base de données Discussion :

SQL: group by qui ne fonctionne pas [Oracle]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 209
    Points : 95
    Points
    95
    Par défaut SQL: group by qui ne fonctionne pas
    Bonjour,

    Sous oracle10 et Toad, je rencontre un problème que je n'avais jamais vu concernant une requête contenant la fonction "group by".
    A savoir que le champ est bien identifié dans le select et le group by mais je reçois un message d'erreur "not a single-group ora-000937" sur le champ en question dans la requête suivante:

    select distinct c1.code,
    ,to_char(last_day(to_date(min(max(iqaamm)),'yyyymm')),'dd/mm/yyyy')
    from client c1, dossier d, L7546_HI_00.hiql i
    where c1.role = '1'
    and c1.code = d.clie
    and i.doss=d.code
    and i.qaamm in (select max(qaamm) from L7546_HI_00.hiql where doss= d.code)
    and i.rubr in (select code from t_rubr where regr='charges')
    group by c1.code
    Par contre, si je mets un max devant le 1er champ, ça fonctionne:

    select distinct max(c1.code),
    ,to_char(last_day(to_date(min(max(iqaamm)),'yyyymm')),'dd/mm/yyyy')
    from client c1, dossier d, L7546_HI_00.hiql i
    where c1.role = '1'
    and c1.code = d.clie
    and i.doss=d.code
    and i.qaamm in (select max(qaamm) from L7546_HI_00.hiql where doss= d.code)
    and i.rubr in (select code from t_rubr where regr='charges')
    group by c1.code
    Or ce n'est pas tellement mon but car ma requête est plus élaborée que cela et certaines valeurs risquent d'être faussées avec la fonction max.
    Aussi ma question est de savoir si il y a une particularité avec oracle 10 concernant la fonction group by.

    Merci d'avance

    Thomas

    PS: j'ai corrigé entre-temps mon post en précisant que l'origine venait non pas du group by mais du fait que je veux récupérer la date du début maximum que j'ai traduit ici à ma façon pour une meilleure compréhension (si je suis clair ) mais en fait il faut la récupérer d'une autre table avec un solde par terme et tantôt il est en impayé, tantôt non comme suit:

    TERME SOLDE
    200905 0
    200906 160
    200907 200
    200808 0
    200909 100
    200910 120
    En utilisant min(max(s.terme)), j'arrive bien à récupérer dans un "select simple" le terme maxi d'impayé que je transforme en format date, dans ce cas il s'agit de 200909 mais dès qu'il est associé à un champ ceci perturbe mon group by apparemment...

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 209
    Points : 95
    Points
    95
    Par défaut
    Problème résolu en simplifiant la requête comme suit:

    select distinct c1.code,
    ,to_char(last_day(to_date(iqaamm,'yyyymm')),'dd/mm/yyyy')
    from client c1, dossier d, L7546_HI_00.hiql i
    where c1.role = '1'
    and c1.code = d.clie
    and i.doss=d.code
    and i.qaamm in (select max(qaamm) from L7546_HI_00.hiql where doss= d.code)
    and i.rubr in (select code from t_rubr where regr='charges')
    group by c1.code
    Bien que précisant que la configuration de la requête est plutôt la suivante en réel:

    select distinct c2.nom_p,
    c1.adr1,c1.lcom||' ('||c1.ptt||')',
    ltrim(to_char(x.solde,'999G999G999D99','nls_numeric_characters = '', ''')),
    to_char(last_day(to_date(s.terme,'yyyymm')),'dd/mm/yyyy')
    ,sum(nvl(i.mtech,0))
    from client c1, v_civilite c2, evenement e, dossier d, ensemble en, contentieux co, solde x, L7546_HI_00.hiql i, solter s
    where c1.role = '1'
    and c1.code = c2.code_client(+)
    and e.code = c1.code
    and e.rang = constante_rang
    and d.code='constante_code'
    and c1.code = d.clie
    and substr(d.Code,1,4) = en.code
    and co.code(+) = d.ctx
    and x.doss = e.doss
    and x.cmpt = '41110000'
    and s.doss=e.doss
    and s.ster>0
    and s.terme in (select min(max(terme)) from solter where doss=e.doss and ster>0 group by terme)
    and i.doss=e.doss
    and i.qaamm in (select max(qaamm) from L7546_HI_00.hiql where doss= e.doss)
    and i.rubr in (select code from t_rubr where regr='charges')
    group by c2.nom_p,
    c1.adr1, c1.lcom||' ('||c1.ptt||')', ltrim(to_char(x.solde,'999G999G999D99','nls_numeric_characters = '', ''')),to_char(last_day(to_date(s.terme,'yyyymm')),'dd/mm/yyyy'
    Ce qui est en gras était auparavant dans le select et gênait mon group by.
    Je l'ai retiré et depuis ça fonctionne. C'était aussi simple que cela

    Thomas

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

Discussions similaires

  1. Requête sql avec jointure qui ne fonctionne pas
    Par Damien062 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 10/03/2015, 09h18
  2. [SQL] Fonction SUM qui ne fonctionne pas !
    Par nigg4z dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 11/10/2007, 16h20
  3. [Access] requete sql qui ne fonctionne pas
    Par pobrouwers dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/03/2007, 12h33
  4. requete sql qui ne fonctionne pas
    Par pobrouwers dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 15/03/2007, 09h37
  5. [SQL] Requête à jointure qui ne fonctionne pas
    Par Bensor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/12/2004, 16h10

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