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 :

Problème avec fonction SUM


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2011
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2011
    Messages : 172
    Points : 88
    Points
    88
    Par défaut Problème avec fonction SUM
    Bonjour forum,

    Je désire faire la somme des montants d'une de mes colonnes et ensuite grouper les livraisons selon leur No de livraison.

    Voici ma requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT Q.sonbralt, sch.prodid, sch.deliveryno, sch.floorid, sch.location, SUM(sch.amount) as Amount, sch.schdate, sch.deliverydate, C.shortname, R.c_address, M.descr
                FROM Customers C
                INNER JOIN roadsheet R ON C.custid = R.custid
                    INNER JOIN rsscheduledtl sch ON R.roadsheetid = sch.roadsheetid 
                        INNER JOIN QOHdr Q ON sch.qonbr = Q.qonbr 
                        INNER JOIN Municipality M ON Q.municipalityId = M.Municipalityid
                WHERE sch.prodid IN (" & critereProd & ")
                AND sch.deliverydate = '" & dateLiv & "'
                GROUP BY sch.deliveryno
    Comment ça fonctionne ? C'est que, selon une date, je veux savoir l'ensemble de mes livraisons, mais je ne veux pas le détail.

    Je voudrais seulement avoir le total des montants des livraisons (Amount) par contrat, si il y a 2 produits, j'aurai donc 2 lignes de livraison par contrat, et si par produit j'ai 2 livraisons j'aurai donc 4 lignes de livraison par contrat, etc.

    Je suis débutant en SQL, j'ai donc besoin de votre aide, car j'ai essayé de cette façon et ça me renvoie l'erreur disant qu'une de mes colonnes ne contient pas d'aggregate function ou la clause GROUP BY

    Merci de votre aide

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Cela aurait été judicieux de lire ce document


    L'erreur est normale, l'écriture devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GROUP BY Q.sonbralt, sch.prodid, sch.deliveryno, sch.floorid, sch.location
    Merci d'ajouter un sur les tags qui vous ont aidé

  3. #3
    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,
    Je dirais même plus:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    group by Q.sonbralt, sch.prodid, sch.deliveryno, sch.floorid, sch.location, sch.schdate, sch.deliverydate, C.shortname, R.c_address, M.descr

    Comme l'indique le message d'erreur, toutes les colonnes renvoyées qui ne font pas l'objet d'une fonction d'aggregation doivent se retrouver dans le group by.

    Tatayo.

  4. #4
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2011
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2011
    Messages : 172
    Points : 88
    Points
    88
    Par défaut
    Merci les gars ça marche!!!

    J'ai utilisé la réponse de tatayo, car tous les champs devaient être inclus dans la clause GROUP BY, mais merci pour le lien dehorter olivier, je vais aller lire ça attentivement.

    Merci!!

  5. #5
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2011
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2011
    Messages : 172
    Points : 88
    Points
    88
    Par défaut
    Bonjour forum,

    J'ai un autre problème en lien avec le précédent message, mais cette fois-ci c'est avec la fonction MIN

    Mon problème est lorsque je veux utiliser cette fonction, je doit inclure l'ensemble de mes colonnes dans ma clause GROUP BY, sinon une erreur survient.

    Mais le problème c'est qu'en effectuant un groupement sur chaque colonne il m'est impossible de grouper des lignes car ils ont tous au moins une valeur d'une colonne différente, donc ma fonction MIN me sert à rien car ma requête me renvoie l'ensemble de mes lignes.

    Si vous avez des idées n'hésitez pas!!

    Merci d'avance

  6. #6
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Le mieux, c'est de nous fournir le schéma de la (ou des) table(s), un jeu de données en exemple et le résultat attendu en sortie de requête.
    Parce que là, sans aucun exemple, ça devient compliqué pour t'aider...
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  7. #7
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2011
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2011
    Messages : 172
    Points : 88
    Points
    88
    Par défaut
    OK je joins un fichier qui contient un exemple ainsi que davantage d'info.

    Je joins également mon code SQL

    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 Q.sonbralt, P.descr, sch.prodid, ps.descr , sch.prodstatusid2, sch.amount,
                sch.deliveryno , z.Name, schwc.nbhours, C." & produit & ",C.custname, sch.schdate, sch.deliverydate
    FROM workcenter w
    INNER JOIN rsscheduledtlwc schwc ON w.wcid = schwc.wcid
        INNER JOIN rsscheduledtl sch ON schwc.rsschdtlid = sch.rsschdtlid
            LEFT JOIN zuser z ON sch.techuserid = z.userid
            INNER JOIN prodstatus ps ON sch.prodstatusid = ps.prodstatusid
            INNER JOIN QOHdr Q ON sch.qonbr = Q.qonbr
                INNER JOIN projecttype P ON Q.projtypeid = P.projtypeid
                INNER JOIN vContractSummary C ON Q.sonbralt = C.sonbralt
    WHERE sch.prodstatusid IN (4,1,6)
        AND sch.isactive = 1 
        AND Q.isActive = 0 
        AND sch.prodid = " & noprod & "
        AND Q.sonbralt IS NOT NULL 
        AND sch.schdate > '" & dateD & "'
        AND schwc.wcid = 2
    Merci
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Problème avec fonctions et string/char
    Par vdumont dans le forum C++
    Réponses: 6
    Dernier message: 08/04/2006, 16h54
  2. Problème avec fonction
    Par Goundy dans le forum C
    Réponses: 24
    Dernier message: 01/10/2005, 20h17
  3. [MFC][WINSOCK] Problème avec fonction recv
    Par Le Farfadet dans le forum MFC
    Réponses: 4
    Dernier message: 23/09/2005, 11h00
  4. Problème avec fonction d'envoie de mail
    Par zyg dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 23/02/2005, 08h48
  5. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 21h52

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