IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Problème de Requête


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 71
    Par défaut Problème de Requête
    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 ...

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Par défaut doublon
    Il semble que tu ais posté 2 fois la même question :
    http://www.developpez.net/forums/sho...d.php?t=261303

  3. #3
    Membre Expert
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Par défaut
    Le join fait un produit cartésien donc en une seule requête ce n'est pas possible (on somme "m1*count(m2)"). Il faudra une requête imbriquée pour faire la somme des m2. Ou carément faire deux requêtes.

    Autre possibilité, comme on a plusieurs m2 pour un seul m1, récupérer "m1.nb_parts, sum(m2.nb_parts)" en groupant sur m1 dans une sous requête, et faire les sommes globales dans la requête englobante.

    En une requête simple je ne vois vraiment pas, sauf à avoir un moyen de lister tous les mouvements (mouvements et réaffectations) concernés et de reconnaitre les réaffectations (avec UNION c'est possible mais c'est encore une requête complexe), ce qui permettrait de signer les 'nb_parts' et de faire une simple somme.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 19
    Dernier message: 27/08/2003, 15h32
  2. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 10h33
  3. Problème de requètes concurentes
    Par Emmanuel.G dans le forum XMLRAD
    Réponses: 3
    Dernier message: 08/08/2003, 16h51
  4. Réponses: 2
    Dernier message: 16/07/2003, 14h40
  5. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo