Somme SQL [Résolu]

Messages postés
6
Date d'inscription
lundi 16 novembre 2009
Statut
Membre
Dernière intervention
29 octobre 2010
- - Dernière réponse : patricevernier
Messages postés
6
Date d'inscription
lundi 16 novembre 2009
Statut
Membre
Dernière intervention
29 octobre 2010
- 18 nov. 2009 à 16:55
Bonjour je suis nul en informatique et on me demande de faire des requêtes SQL à partir de tableau présent sur un programme de gestion d'affaire.

En simple j'ai plusieurs tableaux
-affaire A avec (A.num_affaire, A.lib_affaire, A.login,...)
-lots L avec (L.num_affaire, L.num_lot (il ya souvent plusieurs lots par affaire), L.lib_lot, L.montant_commande (montant de la commande de chaque lot), ...
-Facture
-Postes
-...

Ce que l'on me demande, c'est de faire une requête pour obtenir dans um tableau les affaires par chargé d'affaire (login) avec la somme des montants de commande de chaque lot pour avoir le montant de l'affaire, le nombre de lot (ex:5 lots ou plus).

Voilà ce que j'ai fait pour la somme

SELECT DISTINCT A.num_affaire, A.lib_affaire,A.num_batiment,A.num_local, A.type_affaire, A.date_enreg,A.login, SUM(L.montant_commande) AS Montant FROM affaires A

LEFT OUTER JOIN charges_affaire_autorises CAA ON A.login=caa.login
LEFT OUTER JOIN lots L ON A.num_affaire=L.num_affaire
LEFT OUTER JOIN fournisseurs F ON F.fourniss_id = L.fourniss_id
LEFT OUTER JOIN utilisateurs U1 ON A.login = U1.login
LEFT OUTER JOIN utilisateurs U2 ON L.login = U2.login
LEFT OUTER JOIN utilisateurs U3 ON U3.login = 'VERNIER'
LEFT OUTER JOIN postes P ON P.num_lot = L.num_lot
LEFT OUTER JOIN factures FA ON FA.num_lot = L.num_lot

WHERE ((U3.NIVEAU_ACCES<>'EXTE') AND A.date_enreg >= '1/1/2009' AND A.date_enreg <= '01/01/2010' AND U2.Nom + ' ' + U2.Prenom IN ('BALLON Yves', 'BENOIT Cyril', 'CABANEL Eric', 'COLLEMARE stephane', 'CONRY Cécile', 'ENTZMANN Vincent') AND A.NUM_AFFAIRE=L.NUM_AFFAIRE)

OR ((U3.NIVEAU_ACCES='EXTE') AND ((A.LOGIN= 'VERNIER') OR ( 'VERNIER' IN (SELECT C.LOGIN FROM CHARGES_AFFAIRE_AUTORISES C INNER JOIN LOTS L ON L.NUM_AFFAIRE = C.NUM_AFFAIRE AND L.LOGIN = C.LOGIN WHERE C.NUM_AFFAIRE=A.NUM_AFFAIRE))) AND U2.Nom + ' ' + U2.Prenom IN ('BALLON Yves', 'BENOIT Cyril', 'CABANEL Eric', 'COLLEMARE stephane', 'CONRY Cécile', 'ENTZMANN Vincent') AND A.NUM_AFFAIRE=L.NUM_AFFAIRE) GROUP BY A.num_affaire

ORDER BY A.Login, A.num_affaire, A.lib_affaire, A.num_batiment, A.num_local, A.type_affaire, A.date_enreg,
SUM(L.montant_commande) AS Montant ASC


Cette requête sans la somme marche en me donnant plusieurs lignes de montant par affaire. Mais là ça ne marche pas .

Merci de m'aider...
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
21
3
Merci
Salut,
Dans le group by il faut mettre tous les champs du select, sauf ceux qui sont agregés.

Ie dans ton exemple
A.num_affaire, A.lib_affaire,A.num_batiment,A.num_local, A.type_affaire, A.date_enreg,A.login

Attention l'ordre des champs du group by est important et le distinct ne sert pas dans ce cas.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 138 internautes nous ont dit merci ce mois-ci

Commenter la réponse de nhervagault
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
21
3
Merci
Ah il doit avoir une erreur de syntaxe.

Tu es sur quel est le nom de la base de données qui utilises
Quel dis la base si tu execute la requete en direct dans la base.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 138 internautes nous ont dit merci ce mois-ci

Commenter la réponse de nhervagault
Messages postés
6
Date d'inscription
lundi 16 novembre 2009
Statut
Membre
Dernière intervention
29 octobre 2010
0
Merci
Ok je me doutais et j'avais essayé ce que tu dit mais cela ne marche toujours pas. Est-ce que tu as une autre idée.
Merci pour ton aide
Commenter la réponse de patricevernier
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
21
0
Merci
Quel est le resultat ?
Commenter la réponse de nhervagault
Messages postés
6
Date d'inscription
lundi 16 novembre 2009
Statut
Membre
Dernière intervention
29 octobre 2010
0
Merci
La requête ne se lance pas. Le logiciel de gestion d'affaire sur lequel la requête est faite me dit requête invalide donc je ne sais pas.
Commenter la réponse de patricevernier
Messages postés
6
Date d'inscription
lundi 16 novembre 2009
Statut
Membre
Dernière intervention
29 octobre 2010
0
Merci
Le problème c'étai une virgule, ah des fois...
on en perd la tête.

Merci encore pour ton aide
Commenter la réponse de patricevernier
Messages postés
6
Date d'inscription
lundi 16 novembre 2009
Statut
Membre
Dernière intervention
29 octobre 2010
0
Merci
ah j'ai un autre souci les résultats des sommes sont fausses. La condition where A.num_affaire=L.num_affaire marche pour une autre requête que j'ai fait mais où je n'ai pas de conditions de noms. Dès que j'ajoute les noms les résultats deviennent faux. Pourquoi?

As-tu une idée
Commenter la réponse de patricevernier