Probleme pour sommer

cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 - 20 mai 2008 à 14:44
cs_Malkuth Messages postés 268 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 24 avril 2013 - 23 mai 2008 à 17:29
bonjour,
lors d'une requete je voudrais recuperer des sommes mais j'ai un probleme (sinon je ne poserais pas la question sur le forum lol)
j'ai une table facture et une table elem_facture ou apparraissent les lignes des factures avec le smontants
pour obtenir le montant de la facture je dois donc faire la somm des lignes
et une table reglement (il peut y avoir plusieurs reglements pour une facture) ou figure egalement le numero d ela facture
voici ma requete pour essayer de savoir quelle facture a été réglé ou non ...

select  f.num_fac as num_contrat,sum(ht+tva)
             as TTC,sum(montant) from facture as f join elem_fac as e on e.num_fac=f.num_fac
             left join reglements as p on p.num_contrat=f.num_fac
             where f.num_client=44 group by
             f.num_fac, montant
              order by f.num_fac

quand il y a une ligne de facture et un montant ca marche

J'ai fait le test sur 2 factures réglées (le reglement est egal au montant de la facture) : les montants sont egal a 50

cas n°1 : 2 lignes de facture , 2 reglements : j'obitens montant_fac=100 , montant_regl=100
cas n°2 : 1 ligne de facture , 2 reglements : j'obtiens montant_fac=50, montant_regl=100

si j'enleve les sum , etc... je vois bien que dans le premier cas on a 4 tuples et dans le second 2 mai sje sais pas comment obtenir le resultat escompté

Comment puis je faire pour obtenir les bons montants ? ( en passant par la fonction sum si possible parc eque c'est un peu relou de devoir passer par un programme qui traite lignepar ligne)

Merci d'avance ...
A voir également:

1 réponse

cs_Malkuth Messages postés 268 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 24 avril 2013 4
23 mai 2008 à 17:29
Le plus evident mais pas forcement le plus optimeser serais des sousrequettes :

select 
   f.num_fac as num_contrat,
   ISNULL((SELECT SUM(e.ht + e.tva) FROM elem_fac AS e WHERE e.num_fac=f.num_fac),0) as TTC_Fact,
   ISNULL((SELECT SUM(p.montant) FROM reglements AS p WHERE p.num_contrat=f.num_fac),0) as TTC_Regl
from 
   facture as f 
where 
   f.num_client=44
order by 
   f.num_fac;
0
Rejoignez-nous