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 :

Probleme avec group by


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 37
    Points : 22
    Points
    22
    Par défaut Probleme avec group by
    Bonjour,
    j'ai une requete qui me rend bien le résultat que je veux mais quand je rajoute sum et group by, j'ai des erreurs.
    Pouvez-vous me dire ce qui ne va pas ?
    Merci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    select 
    cf.id_commandec
    ,right(YEAR(cf.fdate)*10000 + MONTH(cf.fdate)*100 + datepart(ww, cf.fdate) ,6) as [Date Facturation],co.libelle,
    cfl.quantite as [nombre de lignes],SUM(round((cfl.montant/cfl.quantite),2)) as CA_TTC,
    SUM(round((((cfl.montant/cfl.quantite)/(1 + cfl.montant_tva/100))),2)) as CA_HT
    from Client_operation co 
    inner join client_facture cf on cf.id_commandec=co.id_document 
    inner join client_facture_ligne cfl on cfl.id_facturec=cf.id_facturec
    inner join produit p on p.id_produit=cfl.id_produit
    where co.type_document='c' and  co.id_type_reglement=25 and cf.id_structure=8 and p.id_produit >10000 and p.id_produit<> 5190962
     order by cf.fdate, p.code_reference 
     group by cf.id_commandec

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    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 103
    Points : 28 394
    Points
    28 394
    Par défaut
    C'est normal que tu aies des erreurs (d'ailleurs si tu nous avais donné les messages d'erreur, ça aurait pu aider à les résoudre )
    D'abord, la clause ORDER BY doit suivre la clause GROUP BY et non l'inverse.
    Ensuite, les colonnes du select qui ne font pas l'objet d'une fonction d'agrégation doivent apparaître dans la clause 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
    SELECT  cf.id_commandec
        ,   RIGHT(YEAR(cf.fdate) * 10000 + MONTH(cf.fdate) * 100 + DATEPART(ww, cf.fdate) ,6) AS [Date Facturation]
        ,   co.libelle
        ,   cfl.quantite AS [nombre de lignes]
        ,   SUM(ROUND((cfl.montant / cfl.quantite), 2)) AS ca_ttc
        ,   SUM(ROUND((((cfl.montant / cfl.quantite) / (1 + cfl.montant_tva / 100))), 2)) AS ca_ht
    FROM    Client_operation co 
        INNER JOIN
            client_facture cf 
            ON  cf.id_commandec = co.id_document 
        INNER JOIN 
            client_facture_ligne cfl 
            ON  cfl.id_facturec = cf.id_facturec
        INNER JOIN 
            produit p 
            ON p.id_produit = cfl.id_produit
    WHERE   co.type_document = 'c' 
        AND co.id_type_reglement = 25 
        AND cf.id_structure = 8 
        AND p.id_produit > 10000 
        AND p.id_produit <> 5190962
    GROUP BY cf.id_commandec
        ,   RIGHT(YEAR(cf.fdate) * 10000 + MONTH(cf.fdate) * 100 + DATEPART(ww, cf.fdate) ,6) AS [Date Facturation]
        ,   co.libelle
        ,   cfl.quantite AS [nombre de lignes]
    ORDER BY cf.fdate
        ,   p.code_reference

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 37
    Points : 22
    Points
    22
    Par défaut probleme group by
    J'ai l'erreur suivante avec ce que tu m'as donné:
    Msg*156, Niveau*15, État*1, Ligne*35
    Syntaxe incorrecte vers le mot clé 'AS'.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    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 103
    Points : 28 394
    Points
    28 394
    Par défaut
    Copier-coller trop rapide
    Supprime les AS xxx dans la clause GROUP BY, ça devrait tout de suite aller mieux.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 37
    Points : 22
    Points
    22
    Par défaut probleme requete
    Merci. J'ai enlevé le AS dans la clause et ajouté , cfl.quantite.
    La requete devient:
    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
    SELECT  cf.id_commandec
        ,   RIGHT(YEAR(cf.fdate) * 10000 + MONTH(cf.fdate) * 100 + DATEPART(ww, cf.fdate) ,6) AS [Date Facturation]
        ,   co.libelle
        ,   cfl.quantite AS [nombre de lignes]
        ,   SUM(ROUND((cfl.montant / cfl.quantite), 2)) AS ca_ttc
        ,   SUM(ROUND((((cfl.montant / cfl.quantite) / (1 + cfl.montant_tva / 100))), 2)) AS ca_ht
    FROM    Client_operation co 
        INNER JOIN
            client_facture cf 
            ON  cf.id_commandec = co.id_document 
        INNER JOIN 
            client_facture_ligne cfl 
            ON  cfl.id_facturec = cf.id_facturec
        INNER JOIN 
            produit p 
            ON p.id_produit = cfl.id_produit
    WHERE   co.type_document = 'c' 
        AND co.id_type_reglement = 25 
        AND cf.id_structure = 8 
        AND p.id_produit > 10000 
        AND p.id_produit <> 5190962
    GROUP BY cf.id_commandec
        ,   RIGHT(YEAR(cf.fdate) * 10000 + MONTH(cf.fdate) * 100 + DATEPART(ww, cf.fdate) ,6) 
        ,   co.libelle
    	, cfl.quantite

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 37
    Points : 22
    Points
    22
    Par défaut probleme requete
    Encore une question.
    Et si je veux ajouter : order by cf.fdate, p.code_reference
    A quel niveau dois-je le mettre?
    Merci.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 37
    Points : 22
    Points
    22
    Par défaut probleme requete
    C bon, j'ai trouvé.
    J'ai ajouté
    ,cf.fdate
    ,p..code_reference
    dans le group by et aprés j'ai ajouté:
    order by cf.fdate, p.code_reference

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 37
    Points : 22
    Points
    22
    Par défaut sommer par semaine un montant
    Bonjour,
    comment peux-t-on sommer un montant par semaine?
    J'ai 1 table1 et j'ai les champs date qui est du format date et le champ montant.
    Je veux sommer le total des montants par semaine.
    Merci.

  9. #9
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    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 103
    Points : 28 394
    Points
    28 394
    Par défaut
    En ayant ajouté cf.fdate dans le GROUP BY, il est normal que tu n'aies plus de regroupement par semaine puisque tu demandes à regrouper par date

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Mais comment regrouper par semaine?
    merci.

  11. #11
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    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 103
    Points : 28 394
    Points
    28 394
    Par défaut
    Ce n'était pas le but de l'expression RIGHT(YEAR(cf.fdate) * 10000 + MONTH(cf.fdate) * 100 + DATEPART(ww, cf.fdate) ,6) dans le GROUP BY ?

  12. #12
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Attention néanmoins à ne pas oublier qu'une même semaine peut être étalée sur deux mois.

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

Discussions similaires

  1. probleme avec group d'option
    Par Daniela dans le forum IHM
    Réponses: 10
    Dernier message: 14/05/2010, 00h27
  2. probleme avec group by dans un bloc anonyme
    Par lucaazori1988 dans le forum PL/SQL
    Réponses: 2
    Dernier message: 04/05/2010, 14h09
  3. Probleme avec GROUP BY
    Par Keweed dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/04/2009, 07h59
  4. probleme avec group by
    Par brudao dans le forum Langage SQL
    Réponses: 1
    Dernier message: 15/01/2009, 13h50
  5. probleme avec group by
    Par dirtyjs dans le forum Access
    Réponses: 1
    Dernier message: 01/09/2006, 03h40

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