bonjour à tous,
j'ai un gros problème de requête.
Je vais essayer de decrire mon probleme pour gagner en lisibilité :
Voila, j'ai une table pour decrire des mouvements (souscription / rachat) sur des fonds (OPCVM). ces fonds sont affectes a des clients
Table mouvements (simplifié) :
=======================
id_mouvement
id_client (id du client auquel est affecte le mouvement)
id_groupe_mouvements
id_operation (1= souscription / 2 = rachat)
nb_parts
id_mouvement_ref (*)
Un "groupe de mouvements" indique a quel fonds (OPCVM) et a quelle date le mouvement est reference :
Table Groupe_Mouvements :
====================
id_groupe_mouvements
id_fonds
date_cotation
(*) Derniere chose : il arrive que des parts soient ré-affectés vers un autre client.
Auquel cas, on cree une seconde ligne de mouvement, avec le champ "id_mouvement_ref" renseigné.
Ex : 100 parts souscrites sur un fonds A pour le client "Cl1" => 1 ligne dans la table mouvements, id = idMvt1
MAIS : 5 parts ré-affectés vers le client "Cl2", et 10 parts vers le client "Cl3" => 2 autres lignes dans la table, avec le champ "id_mouvement_ref=idMvt1"
Quand on comptera les parts souscrites pour le client "cl1", il faudra, non pas compter 100 parts, mais 100 - 5 - 10 = 85 parts.
Maintenant, que desire-je faire ?
Compter l'ensemble des parts souscrites et rachetees pour un client et un fonds en particulier, en prenant en compte les éventuelles parts ré-affectés vers d'autres clients.
Alors voilà la requete que je voulais faire au depart :
select
gm.id_fonds
, sum(m1.nb_parts)
, sum(m2.nb_parts) 'nbPartsReaffectes'
from mouvements m1
inner join groupe_mouvements gm on gm.id_groupe_mouvements=m1.id_groupe_mouvements
left outer join mouvements m2 on m2.id_mouvements_ref=m1.id_mouvements
where m1.id_client = [id de mon client]
and gm.id_fonds = [id de mon fonds]
group by m1.id_client, gm.id_fonds, m1.id_operation
Evidemment ça ne me renvoie pas trop ce que je désire ... J'ai l'impression que ça me compte 2 fois des lignes ...
Alors comment faire ?
Suis je obligé de séparer en 2 requêtes ? L'une pour récupérer les parts souscrites et rachetées, l'autre pour récupérer les parts ré-affectés à d'autres clients ?
Merci d'avance de m'éclairer, car là j'y suis depuis trop de temps ...
Partager