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 :

Group By n'est pas une expression


Sujet :

SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Novembre 2020
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Group By n'est pas une expression
    Bonjour à tous,

    Après des heures de recherches sur le forum et sur le net, et à me creuser la tête de mon coté, je n'arrive pas à terminer ma requête qui me retourne systématiquement une erreur ORA 00979 n'est pas une expression Group BY....

    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
    SELECT tra_posi.num_pos AS NUMERO_DE_DOSSIER,
    tra_posi.cod_trs_cli AS code_client,
    tra_posi.nom_com AS nom_exploitant,
    tra_posi.nbr_tc AS nombre_de_conteneur,
    tra_posi.nbr_col AS nombre_de_colis,
    to_char(tra_doss.dat_etd, 'DD/MM/YYYY') AS date_ETD,
    to_char(tra_doss.dat_eta, 'DD/MM/YYYY') AS date_ETA,
    (sat_facl.mnt_prs / sat_fact.tau_dev) as montant,
    tra_posi.mrg_prv AS MARGE,
    tra_posi.cod_vil_pol AS POL,
    tra_posi.cod_vil_pod AS POD
    from sat_facl,sat_fact,tra_posi,tra_doss
    WHERE sat_facl.cod_soc = sat_fact.cod_soc
    AND sat_facl.cod_eta = sat_fact.cod_eta
    AND sat_facl.typ_uat = sat_fact.typ_uat
    AND sat_facl.num_uat = sat_fact.num_uat
    AND sat_facl.cod_etp = sat_fact.cod_etp
    AND sat_facl.num_lif = sat_fact.num_lig
    AND tra_posi.num_pos = sat_fact.num_uat
    AND tra_posi.num_int_dos = tra_doss.num_int_dos
    AND tra_posi.cod_trs_cli is not null
    AND tra_doss.dat_etd > sysdate -1
    AND tra_doss.dat_etd < sysdate + '15'
    or tra_doss.dat_etd = sysdate
    or tra_doss.dat_etd = sysdate + '15'
    AND sat_facl.typ_uat like 'P'
    AND Sat_facl.num_uat like 'F0%'
    Group by tra_posi.num_pos
    Ma notion de Group by se trouve en dernière ligne, mais impossible de faire quoique ce soit...

    Quelqu'un aurait il une idée?

    Milles mercis à tous.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 783
    Points
    30 783
    Par défaut
    Toutes les expressions de la clause SELECT qui ne font pas l'objet d'une fonction de regroupement doivent être reprises dans la clause GROUP BY.
    Dans cette requête non seulement une seule expression de la clause SELECT est reprise dans la clause GROUP BY mais en plus aucune fonction de regroupement n'est utilisée dans la clause SELECT. Pourquoi utiliser un GROUP BY ?
    Par ailleurs, à moins d'utiliser une version antédiluvienne d'Oracle, il est préférable d'utiliser l'opérateur JOIN pour effectuer des jointures.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Novembre 2020
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour Al1, et surtout merci pour ton retour.

    mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select tra_posi.num_pos AS NUMERO_DE_DOSSIER
    , correspond a différents numéros de dossier, et ma ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (sat_facl.mnt_prs / sat_fact.tau_dev) as montant
    correspond à plusieurs montant pour chaque ligne du dossier, et je souhaitais cumuler ces montants pour obtenir un cumul par dossier.

    de ce que je comprends il faudrait que je place un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Group by tra_posi.num_pos, tra_posi.cod_trs_cli, tra_posi.nom_com, tra_posi.nbr_tc, tra_posi.nbr_col, tra_doss.dat_etd, tra_doss.dat_eta,tra_posi.mrg_prv,tra_posi.cod_vil_pol,tra_posi.cod_vil_pod
    c'est cela?

    Désolé je suis un peu perdu...

    Merci

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 783
    Points
    30 783
    Par défaut
    Quelque chose 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    SELECT  pos.num_pos     AS NUMERO_DE_DOSSIER
        ,   pos.cod_trs_cli AS code_client
        ,   pos.nom_com     AS nom_exploitant
        ,   pos.nbr_tc      AS nombre_de_conteneur
        ,   pos.nbr_col     AS nombre_de_colis
        ,   TO_CHAR(dos.dat_etd, 'DD/MM/YYYY')  AS date_ETD
        ,   TO_CHAR(dos.dat_eta, 'DD/MM/YYYY')  AS date_ETA
        ,   SUM(fcl.mnt_prs / fct.tau_dev)      AS montant
        ,   pos.mrg_prv     AS MARGE
        ,   pos.cod_vil_pol AS POL
        ,   pos.cod_vil_pod AS POD
    FROM    sat_facl    fcl
        INNER JOIN
            sat_fact    fct
            ON  fcl.cod_soc = fct.cod_soc
            AND fcl.cod_eta = fct.cod_eta
            AND fcl.typ_uat = fct.typ_uat
            AND fcl.num_uat = fct.num_uat
            AND fcl.cod_etp = fct.cod_etp
            AND fcl.num_lif = fct.num_lig
        INNER JOIN
            tra_posi    pos
            ON  pos.num_pos = fct.num_uat
        INNER JOIN
            tra_doss    dos
            ON  dos.num_int_dos = pos.num_int_dos
    WHERE   pos.cod_trs_cli IS NOT NULL
        AND dos.dat_etd > SYSDATE -1
        AND dos.dat_etd < SYSDATE + 15
        OR  dos.dat_etd = SYSDATE
        OR  dos.dat_etd = SYSDATE + 15
        AND fcl.typ_uat = 'P'
        AND Sat_facl.num_uat LIKE 'F0%'
    GROUP BY pos.num_pos
        ,   pos.cod_trs_cli
        ,   pos.nom_com
        ,   pos.nbr_tc
        ,   pos.nbr_col
        ,   TO_CHAR(dos.dat_etd, 'DD/MM/YYYY')
        ,   TO_CHAR(dos.dat_eta, 'DD/MM/YYYY')
        ,   pos.mrg_prv
        ,   pos.cod_vil_pol
        ,   pos.cod_vil_pod
    Attention : Telle que sont organisées les conditions de restriction, celles-ci seront interprétées ainsi (application de la règle de précédence des opérateurs) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    WHERE   (   pos.cod_trs_cli IS NOT NULL
            AND dos.dat_etd > SYSDATE -1
            AND dos.dat_etd < SYSDATE + 15
            )
        OR  dos.dat_etd = SYSDATE
        OR  (   dos.dat_etd = SYSDATE + 15
            AND fcl.typ_uat = 'P'
            AND Sat_facl.num_uat LIKE 'F0%'
            )
    Est-ce bien ce qui est attendu ?
    Sinon, il va falloir ajouter des parenthèses pour regrouper les conditions de manière logique.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    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 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Ou plus simplement utiliser BETWEEN :

    AND dos.dat_etd between SYSDATE - 1 AND SYSDATE + 15.

    Sous réserve que ce soit bien la restriction recherchée

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/01/2020, 12h08
  2. N'est pas une expression GROUP BY
    Par amine381 dans le forum SQL
    Réponses: 3
    Dernier message: 25/03/2013, 11h56
  3. ORA-00979: N'est pas une expression GROUP BY
    Par Jinkas dans le forum SQL
    Réponses: 23
    Dernier message: 21/03/2012, 09h46
  4. ORA-00979: N'est pas une expression GROUP BY
    Par chakibtag dans le forum SQL
    Réponses: 2
    Dernier message: 09/07/2008, 10h22
  5. ORA-00979: N'est pas une expression GROUP BY
    Par NiGHtyWolf dans le forum Oracle
    Réponses: 3
    Dernier message: 10/05/2007, 19h11

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