Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/09/2011, 15h42   #1
Nouveau Membre du Club
 
Homme
Administrateur de base de données
Inscription : mai 2011
Messages : 99
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 : 99
Points : 29
Points : 29
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 :
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
Beaudelicius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 15h55   #2
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
Cela aurait été judicieux de lire ce document


L'erreur est normale, l'écriture devrait être :
Code :
1
2
 
GROUP BY Q.sonbralt, sch.prodid, sch.deliveryno, sch.floorid, sch.location
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 16h09   #3
Membre Expert
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 092
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 092
Points : 1 898
Points : 1 898
Bonjour,
Je dirais même plus:
Code SQL :
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.
tatayo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 17h07   #4
Nouveau Membre du Club
 
Homme
Administrateur de base de données
Inscription : mai 2011
Messages : 99
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 : 99
Points : 29
Points : 29
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!!
Beaudelicius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 14h45   #5
Nouveau Membre du Club
 
Homme
Administrateur de base de données
Inscription : mai 2011
Messages : 99
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 : 99
Points : 29
Points : 29
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
Beaudelicius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 14h52   #6
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 433
Points : 6 433
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
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 20h01   #7
Nouveau Membre du Club
 
Homme
Administrateur de base de données
Inscription : mai 2011
Messages : 99
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 : 99
Points : 29
Points : 29
OK je joins un fichier qui contient un exemple ainsi que davantage d'info.

Je joins également mon code SQL

Code :
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
Type de fichier : xls Exemple(Req).xls (69,0 Ko, 0 affichages)
Beaudelicius est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h58.


 
 
 
 
Partenaires

Hébergement Web