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

Langage SQL Discussion :

probleme requete autojointure


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 72
    Par défaut probleme requete autojointure
    Bonjour voila ma requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select rub.id_rubrique, rub.id_rubrique_mere, sum(r.montant) as engagement , 
    sum(o.montant) as paiement , rub.designation, sum(o.montant) + sum(r.montant) as Cumul 
    from operation o left join operation r on ( o.type_op = 'P' and r.type_op = 'E'  ), rubrique rub 
    where rub.id_rubrique = 79
    group by rub.id_rubrique, rub.designation , rub.id_rubrique_mere
    je qu'elle me calcule le paiement si type_op = 'P' et l'engagement si type_op = 'E' mais cette requete m'envoie paiement = engagement meme si j'ai juste type_op = 'E' c'est a dire ps de paiement

    Voila mon email : fdioua85@hotmail.com

    merci d'avance

  2. #2
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Bonjour,

    J'aurais plutôt vu des tables dérivées ou l'utilisation d'une condition du style IIF !

    PS: Pensez aux balises CODES !!!



    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  3. #3
    Membre émérite Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Par défaut
    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
     
    SELECT 
      rub.id_rubrique, 
      rub.id_rubrique_mere, 
      sum(r.montant) AS engagement , 
      sum(o.montant) AS paiement , 
      rub.designation, 
      sum(o.montant) + sum(r.montant) AS Cumul 
    FROM 
       operation o LEFT JOIN operation r ON ( o.type_op = 'P' AND r.type_op = 'E'  ), 
       rubrique rub 
    WHERE 
      rub.id_rubrique = 79
    GROUP BY 
      rub.id_rubrique, 
      rub.designation , 
      rub.id_rubrique_mere
    Déjà, je ne vois pas les jointures entre la table 'o' et la table 'r', tes clauses JOIN sont des filtrages, pas des jointures. idem avec la table rubrique qui est seulement filtrée.
    Donc au final, tu dois avoir un produit des lignes de 'o' par 'r' et par 'rub' ... ca fait beaucoup. Et donc des résultats totalement incohérents.


    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
     
    SELECT 
      rub.id_rubrique, 
      rub.id_rubrique_mere, 
      sum(r.montant) AS engagement , 
      sum(o.montant) AS paiement , 
      rub.designation, 
      sum(o.montant) + sum(r.montant) AS Cumul 
    FROM 
       operation o FULL OUTER JOIN operation r ON ( o.id=r.id  ), 
                       JOIN rubrique rub ON (o.rub_id=rub.id_rubrique OR r.rub_id=rub.id_rubrique  )
    WHERE 
      (o.type_op = 'P' OR r.type_op = 'E')
      AND rub.id_rubrique = 79
    GROUP BY 
      rub.id_rubrique, 
      rub.designation , 
      rub.id_rubrique_mere
    QQchose dans le style devrait marché (non testé). Sinon, une solution plus rapide (je pense) est de passer par une requête union.

    ++

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 72
    Par défaut probeme requete autojointure
    Bonsoir
    malheureusement cette requete ne fonctionne pas
    et meme si je l'ai modifié j'ai tjrs le mme prob paiement = engagement mme si il y a juste le type_o = 'E' normalement pas de paiement

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 72
    Par défaut probleme requete autojointure
    Bonjour
    est ce que qlq un peut m'aider car j'ai pas encore trouvé une solution
    merci d'avance

  6. #6
    Membre émérite Avatar de Spoutnik
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 672
    Par défaut
    Essaye ca :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    SELECT 
      rub.id_rubrique, 
      rub.id_rubrique_mere, 
      sum(engagement) AS engagement , 
      sum(paiement) AS paiement , 
      rub.designation, 
      sum(engagement) + sum(paiement) AS Cumul 
    
    FROM (SELECT 
               o.id_rubrique, //et non pas rub.id_rubrique, 
              0 AS engagement , 
              o.montant AS paiement 
             FROM 
              operation o 
             WHERE 
                    o.id_rubrique = 79
              AND o.type_op = 'P'
             UNION
             SELECT 
               o.id_rubrique, //et non pas rub.id_rubrique, 
              o.montant AS engagement , 
              0 AS paiement 
             FROM 
              operation o 
             WHERE 
                    o.id_rubrique = 79
              AND o.type_op = 'E') datas JOIN rubrique rub ON (rub.id_rubrique = datas.id_rubrique)     
    GROUP BY
      rub.id_rubrique, 
      rub.id_rubrique_mere, 
      rub.designation
    Requete pas testée

    Par contre, si ca ne fait pas ce que tu veux, pourrais tu :
    - donner le type de base que tu utilise + version
    - donner la structure de tes tables (+ nom des colonnes).

    ca aidera

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

Discussions similaires

  1. Probleme requete ALTER TABLE
    Par syseval dans le forum Langage SQL
    Réponses: 4
    Dernier message: 07/04/2005, 12h49
  2. [requete SQL] Probleme requete UPDATE
    Par Shiryu44 dans le forum JDBC
    Réponses: 12
    Dernier message: 10/03/2005, 11h41
  3. probleme requete update
    Par Amandine62 dans le forum ASP
    Réponses: 12
    Dernier message: 27/01/2005, 11h15
  4. probleme requete
    Par voyageur dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 06/11/2004, 21h43
  5. Réponses: 3
    Dernier message: 17/05/2004, 17h28

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