AH60
Messages postés20Date d'inscriptionlundi 27 novembre 2006StatutMembreDernière intervention 7 mai 2009
-
29 avril 2009 à 10:36
AH60
Messages postés20Date d'inscriptionlundi 27 novembre 2006StatutMembreDernière intervention 7 mai 2009
-
7 mai 2009 à 19:53
je voudrais faire la somme des crédits de la table banque du fournisseur x
et la somme des montants de la table charges du même fournisseur
genre (GROUP BY )
et mettre tout ca dans une troisième table appelée récap
sachant que j’ai plusieurs fournisseurs soit dans la table banque ou dans la table charges, les deux tables sont liées par le champ code
quelqu’un peut m'aider a trouver le sql qui règle ce problème.
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 29 avril 2009 à 15:10
Salut,
tu passes d' abord par une requete incluant les deux tables,
et dans laquelle tu sélectionnera fournisseur, credit, montant.
Reste à savoir quelle sera la propriété de la relation.
Pour celà tu dois répondre à la question:
Est-ce qu' un fournisseur peut avoir un crédit et pas de charge ou l' inverse ?
La réponse déterminera de quelle table sera extrait le champ fournisseur.
Deux possibilité alors:
-Soit :banque.Fournisseur, banque.credit, IIF(IsNull(charges.montant),0,charges.montant)
-Soit :charges.Fournisseur, chatres.montant, IIF(IsNull(banque.credit),0,banque.credit).
C' est après que tu pourras faire ,l à partir de cette requete, le regroupement sur fournisseur pour avoir la somme de credit et la somme de montant.
AH60
Messages postés20Date d'inscriptionlundi 27 novembre 2006StatutMembreDernière intervention 7 mai 2009 29 avril 2009 à 15:53
Salut,
un fournisseur peut avoir plusieurs crédits.banque et plusieurs montants.charges, je voudrais avoir des enregistrements dans la troisième table
comme ceci
code Somme_montants Somme_credits
x 1000 1500
y 1500 2000
z 3000 3000
ect........
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 29 avril 2009 à 16:23
"..un fournisseur peut avoir plusieurs crédits.banque
et plusieurs montants.charge"
Pris indépendament, d' acc !
Mais là puisque les deux vont être mises en relation.
La question est :
Est-ce qu'un fournisseur peut avoir des crédits sans avoir de charges ?
Est-ce qu'un fournisseur peut avoir des charges sans avoir de crédits ?
Ou bien:
S' il a une charge, il a forcément un crédit ? (ou inversement)
De ceci dépendera le type de correspondance qu' il y' aura entre les deux tables.
Quand tu dis :
code Somme_montants Somme_credits
Puisque le champ code éxiste dans les deux tables, la requete doit savoir de la quelle des deux elle va extraire ce champ ci.
AH60
Messages postés20Date d'inscriptionlundi 27 novembre 2006StatutMembreDernière intervention 7 mai 2009 29 avril 2009 à 16:42
Re,
peut être j'ai mal exposé le pb
voilà exemple : un fournisseur peut avoir cinq (5) crédits et peut avoir aussi huit (8) charges donc là je voudrais la somme des cinq (5) crédits et la somme de huit (8) montants a part du meme fournisseur. et en passe au deuxieme fournisseur ect... j'usqu'a la fin
pour ce qui est du code Somme_montants Somme_credits c'est les noms des champs de la troisieme table.
j'espère que j'étais clair maintenant.
Merci
Abed_H
Vous n’avez pas trouvé la réponse que vous recherchez ?
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 29 avril 2009 à 17:05
"..un fournisseur peut avoir cinq (5) crédits et
peut avoir aussi huit (8) charges"
Encore une fois, t' a spas répondu à la question !
Est-ce qu' un fournisseur peut avoir cinq (5) crédits et
peut avoir aussi nulle charge ?
Est-ce qu' un fournisseur peut avoir nul crédit et
peut avoir aussi huit (8) charges ?
A supposer que l' on fait selon l' exemple)
-une première requete pour avoir la somme des CINQ crédits.
-une deuxère requete pour avoir la somme des HUIT chargess.
-Une troisième requete dans laquelle on lie la première avec la deuxième,
pour avoir la somme des CINQ crédits et la somme des HUIT charges.
De la quelle des deux on va tirer le champ fournisseur ?
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 29 avril 2009 à 17:33
Une solution cependant:
Si tu as une table fournisseurs, fais une première requete pour avoir la somme des crédits de chaque fournisseurs et une deuxième pour avoir la somme des charges de chaque fournisseur.
Dans une requete avec les trois,lies ta table fournissurs à ses deux requetes .Propriété de chaque liaison:Tous de la table fournisseurs.
Et extrait:
-le champ fournisseur de la table fournisseurs.
-la somme des crédits de la première requete.
-la somme des charges de la deuxière requete.
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 29 avril 2009 à 17:59
Autre solution:
Fais une requete UNION:
"SELECT code, fournisseur, credit, 0 AS montant FROM credit " & _
"UNION SELECT code, fournisseur, 0 AS credit, montant FROM charges;"
Puis fais une requete regroupement sur cette requete pour avoir code, somme de credit, somme de charge.
tu peux y
certainement y arriver en faisant plusieurs opérations et en stockant les résultats
intermédiaires, mais pourquoi se passer de la puissance de SQL ? Ton problème serait résolu en une seule requête,
mais pour cela il faudrait que ta base de données soit bien structurée, ce qui
n’est pas le cas de l’exemple que tu donnes. Si tu veux faire un regroupement
par fournisseur il faut impérativement que tous les fournisseurs soient présents
dans une des tables ce dont on ne peut être sûr avec tes tables actuelles (d’où
les questions de libre Max au sujet des fournisseurs avec ou sans crédit/charge).
Mon conseil est
donc de commencer par revoir la structure de ta base de données ; c’est un
peu contraignant, mais crois-moi ca aura beaucoup d’avantages si tu veux faire évoluer
ton application dans le futur, et puis c’est mieux de faire les choses comme
elles doivent être faites :
-
Si tu as peu de champs, et tu veux faire
simple, tu peux te limiter a une seule table :
Fournisseur
,
Code
,
Crédit
,
Montant
,
----
,
,
,
Lors de la saisie
ton application mettra à jour la colonne crédit/montant appropriée et laissera
l’autre à 0. Le code correspondra à la colonne mise
à
jour (si dans ton exemple
le code se rapporte
à
l’opération ; je n’ai pas bien compris).
Cde SQL pour avoir
les sommes par fournisseur :
SELECT table4.fournisseur, Sum(table4.credit)
AS SommeDecredit, Sum(table4.Montant) AS SommeDeMontant
FROM
table4
GROUP
BY table4.fournisseur;
-
Si tu as plusieurs champs relatifs au
fournisseur (tel,adresse …), ou tu veux te familiariser avec les BDD
relationnelles , tu peux faire :
La contrainte est
que si tu veux ajouter un crédit/montant
à
un fournisseur, ce dernier doit
exister dans la table des fournisseurs. C'est
à
ton application de le gérer.
Cde SQL pour avoir
les sommes par fournisseur :
SELECT Table1.Id, Sum(Table2.Crédit)
AS SommeDecredit, Sum(Table2.Montant) AS SommeDeMontant
FROM Table1 LEFT JOIN Table2 ON Table1.Id = Table2.IdFournisseur
GROUP BY Table1.Id;
En espérant que ça
fasse avancer le SCHMILBLIK …..
AH60
Messages postés20Date d'inscriptionlundi 27 novembre 2006StatutMembreDernière intervention 7 mai 2009 4 mai 2009 à 10:12
Bonjour et merci beaucoup š€ vous deux
ce code m'a donnšŠ exactement le ršŠsultat escomptšŠ mais seulement j'aurais pršŠfšŠrer que la somme des montants soit dans une colonne et la somme des cršŠdits dans une autre colonne en face.
Sub Main()
Dim strConn As ADODB.Connection
Dim rstBq As ADODB.Recordset 'code banques
Set strConn = New ADODB.Connection
MaDb = "D:\GestRecettes\Base.mdb"
strConn = "driver={Microsoft Access Driver (*.mdb)};dbq=" & MaDb
strConn.Open
Set rstBq = New ADODB.Recordset
rstBq.Open "SELECT code,Sum(dšŠpense) AS SommeDecredit from mvtsbanques group by code " & _
"UNION SELECT code,Sum(Montant) AS SommeDeMontant From charges group by code ", strConn, 1, 3
Feuil1.Range("A1").CopyFromRecordset rstBqSet rstBq Nothing: Set strConn Nothing
End Sub
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 5 mai 2009 à 11:07
"SELECT code, Sum(dšŠpense) AS SommeDecredit, 0 AS SommeDeMontant from mvtsbanques group by code " & _
"UNION SELECT code, 0 AS SommeDecredit, Sum(Montant) AS SommeDeMontant From charges group by code "
<hr />
AH60
Messages postés20Date d'inscriptionlundi 27 novembre 2006StatutMembreDernière intervention 7 mai 2009 7 mai 2009 à 19:53
Bonjour et merci LIBRE_ MAX
c'est à ce moment là que j'ai compris ta solution, c'est exactement que je cherchais merci encore une fois
bonne journée
Abed_H