Bonjour,
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 :
| Table fournisseurs(table1) | | Table Données(table2) |
| Id | Fournisseur | Tel | Adresse | | IdFournisseur | Code | Crédit | Montant |
| 1 | | | | | 1 | | | |
| 2 | | | | | 2 | | | |
| 3 | | | | | 2 | | | |
| | | | | | 1 | | | |
| | | | | 3 | | | |
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 ...