Bonjour messieurs dames,
J'ai deux tables
mvt (id_mvt, id_affaire, mt_mvt)
reg (id_reg, id_mvt, id_affaire, mt_reg)
Le but est de récupérer pour une affaire ses montants dans mvt mais aussi les montants dans reg sachant qu'un mouvement peut avoir 0 ou plusieurs reglements
Première idée :
Sauf que là mes montants dans mvt sont multipliés par le nombre d'enregistrements de reg. => pas bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 select id_affaire, sum(mt_mvt), sum(mt_reg) from mvt left outer reg on mvt.id_mvt = reg.id_mvt and mvt.id_affaire = reg.id_affaire where mvt.id_affaire = :pid group by id_affaire ;![]()
Deuxième idée :
Là çà fonctionne mais on remarque qu'on passe deux fois sur la table mvt (c'est uen table à 20 millions d'enreg et reg à 100 millions). => requete un peu lente
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 select id_affaire, (select sum(mt_mvt) from mvt where mvt.id_affaire = :pid) mt_mvt, (select sum(mt_reg) from reg where reg.id_affaire = :pid and exists (select 1 from mvt where mvt.id_mvt = reg.id_mvt)) mt_reg from dual ;
Ma question : existe-t-il une méthode pour faire une sorte de "rupture" sur mvt.id_affaire du genre sum(mt_mvt distinct id_affaire)
Merci d'avance.
Partager