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

Langage SQL Discussion :

Group by dans une requête ayant une sous-requête


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2016
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Octobre 2016
    Messages : 109
    Points : 162
    Points
    162
    Par défaut Group by dans une requête ayant une sous-requête
    Bonjour,



    Je n'arrive pas à utiliser le groupe by dans ma requête qui a une sous requête, si je supprime la ligne du group by la requête s'exécute correctement.



    J'utilise Sql View pour une base de donnée Orale 11Gg,



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select   (select d.iptdat_0 from stojou d  where (a.itmref_0=d.itmref_0 and a.sdhnum_0=d.vcrnum_0 and a.sddlin_0=d.vcrlin_0 and d.regflg_0=1 )) as ydate ,
     
    e.shidat_0,  e.sohnum_0, e.soplin_0, e.itmref_0, e.qtystu_0 ,e.dlvqty_0, e.extdlvdat_0, e.sdhnum_0
     
    from sorderq e inner join sdeliveryd a on (a.sohnum_0=e.sohnum_0 and a.soplin_0=e.soplin_0 and a.soqseq_0=e.soqseq_0)
     
    group by ydate, e.shidat_0,  e.sohnum_0, e.soplin_0, e.itmref_0, e.qtystu_0 ,e.dlvqty_0, e.extdlvdat_0, e.sdhnum_0  ;


    Message d'erreur :

    14:24:27 : Ligne 12 : Invalid field name.

    [Oracle][ODBC][Ora]ORA-00904: "YDATE" : identificateur non valide




    Cordialement,

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Quelle est l'intérêt d'un GROUP BY ici, vu qu'il n'y a aucune fonction d'agrégation ?

    Tatayo.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 561
    Points
    38 561
    Billets dans le blog
    9
    Par défaut
    Group by inutile en effet + parenthèses inutiles à la fois au niveau du filtre de la requête imbriquée et du prédicat de jointure JOIN + absence de mise en forme, rendent cette requête peu lisible

    C'est pas plus facile à lire comme ç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
    select   
         (select d.iptdat_0 
          from stojou d  
          where a.itmref_0=d.itmref_0 
            and a.sdhnum_0=d.vcrnum_0 
            and a.sddlin_0=d.vcrlin_0 
            and d.regflg_0=1 ) as ydate 
         , e.shidat_0
         , e.sohnum_0 
         , e.soplin_0
         , e.itmref_0
         , e.qtystu_0
         , e.dlvqty_0
         , e.extdlvdat_0
         , e.sdhnum_0
    from sorderq e 
    inner join sdeliveryd a 
       on a.sohnum_0=e.sohnum_0 
      and a.soplin_0=e.soplin_0 
      and a.soqseq_0=e.soqseq_0

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    En effet, la requête est bien plus lisible, du coup je me demande à quoi sert la sous-requête ? Une simple jointure fera l'affaire ici:

    Code sql : 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
     
    select   
         d.iptdat_0 as ydate 
         , e.shidat_0
         , e.sohnum_0 
         , e.soplin_0
         , e.itmref_0
         , e.qtystu_0
         , e.dlvqty_0
         , e.extdlvdat_0
         , e.sdhnum_0
    from sorderq e 
    inner join sdeliveryd a 
       on a.sohnum_0=e.sohnum_0 
      and a.soplin_0=e.soplin_0 
      and a.soqseq_0=e.soqseq_0
    left outer join stojou d  
          on a.itmref_0=d.itmref_0 
            and a.sdhnum_0=d.vcrnum_0 
            and a.sddlin_0=d.vcrlin_0 
            and d.regflg_0=1

    Tatayo.

  5. #5
    Membre habitué
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2016
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Octobre 2016
    Messages : 109
    Points : 162
    Points
    162
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Group by inutile en effet + parenthèses inutiles à la fois au niveau du filtre de la requête imbriquée et du prédicat de jointure JOIN + absence de mise en forme, rendent cette requête peu lisible

    C'est pas plus facile à lire comme ç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
    select   
         (select d.iptdat_0 
          from stojou d  
          where a.itmref_0=d.itmref_0 
            and a.sdhnum_0=d.vcrnum_0 
            and a.sddlin_0=d.vcrlin_0 
            and d.regflg_0=1 ) as ydate 
         , e.shidat_0
         , e.sohnum_0 
         , e.soplin_0
         , e.itmref_0
         , e.qtystu_0
         , e.dlvqty_0
         , e.extdlvdat_0
         , e.sdhnum_0
    from sorderq e 
    inner join sdeliveryd a 
       on a.sohnum_0=e.sohnum_0 
      and a.soplin_0=e.soplin_0 
      and a.soqseq_0=e.soqseq_0
    je développe mes requêtes sous Sql View, la mise en forme n'est ps top !

  6. #6
    Membre habitué
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2016
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Octobre 2016
    Messages : 109
    Points : 162
    Points
    162
    Par défaut
    Citation Envoyé par tatayo Voir le message
    En effet, la requête est bien plus lisible, du coup je me demande à quoi sert la sous-requête ? Une simple jointure fera l'affaire ici:

    Code sql : 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
     
    select   
         d.iptdat_0 as ydate 
         , e.shidat_0
         , e.sohnum_0 
         , e.soplin_0
         , e.itmref_0
         , e.qtystu_0
         , e.dlvqty_0
         , e.extdlvdat_0
         , e.sdhnum_0
    from sorderq e 
    inner join sdeliveryd a 
       on a.sohnum_0=e.sohnum_0 
      and a.soplin_0=e.soplin_0 
      and a.soqseq_0=e.soqseq_0
    left outer join stojou d  
          on a.itmref_0=d.itmref_0 
            and a.sdhnum_0=d.vcrnum_0 
            and a.sddlin_0=d.vcrlin_0 
            and d.regflg_0=1

    Tatayo.
    oui je suis d'accord , je peux ne pas utiliser la sous-requête dans ce cas, d'ou mon erreur ?

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 561
    Points
    38 561
    Billets dans le blog
    9
    Par défaut
    Non, l'erreur initiale était due à l'utilisation d'un alias (YDATE) dans l'instruction GROUP BY alors que celle-ci ne l'autorise pas (ce qui est fort dommage du reste)
    Mais comme votre GROUP BY était inutile, la solution était de le supprimer

  8. #8
    Membre habitué
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Octobre 2016
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Octobre 2016
    Messages : 109
    Points : 162
    Points
    162
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Non, l'erreur initiale était due à l'utilisation d'un alias (YDATE) dans l'instruction GROUP BY alors que celle-ci ne l'autorise pas (ce qui est fort dommage du reste)
    Mais comme votre GROUP BY était inutile, la solution était de le supprimer
    Merci pour vos réponses

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/07/2016, 16h49
  2. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  3. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  4. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  5. Paramètre d'une sous requète venant de la requète mère
    Par silver.spike dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/06/2007, 10h42

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