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 :

Récupérer deux SUM différentes en fonction d'un autre champ


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 22
    Points : 15
    Points
    15
    Par défaut Récupérer deux SUM différentes en fonction d'un autre champ
    Bonjour à tous,

    Je m'arrache les cheveux depuis 2 jours sur une requête un peu bizarre, je ne sais même pas si c'est possible, mais je sollicite votre aide parce que je me dis qu'il existe peut-être une opération sql que je ne connais pas.

    Je vais essayer d'expliquer au mieux mon problème. J'ai deux tables (a et b) dont b dépend de a.




    En gros j'ai ces deux tables avec b qui dépend de a, autrement dit une entrée dans a donne minimum deux entrées dans b.

    J'ai besoin (en une requête si possible) de récupérer et de m'afficher tous les enregistrements où la somme des montants de type C est différente de la somme des montants de type D pour un même id_a.
    Donc somme type C - somme type D != 0

    J'ai essayé avec des requêtes imbriquées et ça ne fonctionne pas. J'avais jusque là 3 requêtes (faites à la va vite) mais qui ne suffisent plus maintenant (temps d'exécution trop long, la requête ne passe pas). Donc afin d'éviter cela je voulais en profiter pour tout passer dans une seule requête voir deux maximum mais je voudrais aussi ne sélectionner que les id_a où la soustraction de mes sommes est différente de 0 ce qui réduirait considérablement le temps d'exécution (j'ai des dizaines de milliers d'enregistrements).

    Pour ceux qui connaissent les principes d'équilibre en comptabilité c'est de ça qu'il s'agit.

    J'espère être assez clair, mais c'est assez compliqué à expliquer. Si vous avez besoins de précisions n'hésitez pas.


    Par avance merci, Welden
    Images attachées Images attachées  

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Si j'ai bien compris ce que tu cherches, regarde si cette requête peut convenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    SELECT b.id_b, b.id_a, b.type_montant, b.montant
    FROM table_b b
    INNER JOIN 
    (
    	SELECT id_a, 
    		SUM(
    			CASE 
    				WHEN type_montant = 'C' THEN montant
    			END
    		) AS Somme_type_C,
    		SUM(
    			CASE 
    				WHEN type_montant = 'D' THEN montant
    			END
    		) AS Somme_type_D
    	FROM table_b
    	GROUP BY id_a
    ) tmp ON tmp.id_a = b.id_a
    WHERE tmp.Somme_type_C <> tmp.Somme_type_D
    Nota : la table_a ne semble pas nécessaire, ou alors il y a un truc que je n'ai pas compris dans ton besoin.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    Impeccable ça marche du tonnerre, merci

    J'ai simplement eu à adapter au nom de mes champs et de table et une petite modif dans le inner join


    Alors pour te répondre oui dans mon exemple la table a paraît obsolète, mais j'ai énormément allégé les tables pour expliquer simplement. Concrètement la table a possède 19 ou 20 champs, elle concerne mes pièces comptables et la table b elle concerne la ventilation de ces pièces comptables, d'où la nécessité d'avoir deux tables.

    En tout cas je ne connaissais pas ces instructions sql (CASE, WHEN, ...) et je pense que j'aurais l'occasion de m'en reservir. Merci encore ^^

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/06/2009, 22h38
  2. Réponses: 1
    Dernier message: 03/05/2007, 08h10
  3. Réponses: 15
    Dernier message: 02/05/2007, 18h04
  4. [VBA] Remplir un champ en fonction d'un autre champ
    Par Amanck dans le forum Access
    Réponses: 6
    Dernier message: 18/05/2006, 10h12
  5. Réponses: 7
    Dernier message: 06/01/2006, 10h47

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