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

  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

  7. #7
    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
    Bonsoir
    j'ai testé la requete mais j'avais cette erreur :

    Msg*4104, Niveau*16, État*1, Ligne*1
    The multi-part identifier "rub.id_rubrique" could not be bound.
    Msg*4104, Niveau*16, État*1, Ligne*1
    The multi-part identifier "rub.id_rubrique" could not be bound.

    En fait j'utilise BD sous sql server management studio express,

    pour les tables

    rubrique (#id_rubrique, designation, id_rubrique_mere)
    operation (#id_op, id_rubrique, type_op, montant )

  8. #8
    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
    Bonsoir
    et qd j'enlevé les deux derniers rub.id_rubrique et j'ai laissé juste la 1re
    j'avais cette erreur Invalid column name 'id_rubrique'. cette erreur concerne datas.id_rubrique je pense c'est prob au niveau de datas

  9. #9
    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
    j'ai corrigé la requete (je pense)

  10. #10
    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
    mais elle ne fonctionne pas
    il ne connait pas datas.id_rubrique
    et mme si j'ai fait des changements, j'avais la valaur de paiement = 0 mme si j'ai ajouté un type 'P'
    alors je ss encore bloqué

  11. #11
    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
    Bonsoir
    je viens de voir les commentaires que t as ajouté
    merci bien c'est resolu

  12. #12
    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
    cool!

    oublie pas de passer le sujet en

  13. #13
    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
    mais j'ai une question moi je veux changé la valeur de id_rubrique_mere pas de o.id_rubrique
    tu sais comment faire ??

  14. #14
    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
    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 JOIN rubrique rub1 ON (rub1 .id_rubrique = o.id_rubrique)
             WHERE 
                     rub1 .id_rubrique_mere = cequetuveux
              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 JOIN rubrique rub1 ON (rub1.id_rubrique = o.id_rubrique)
             WHERE 
                    rub1.id_rubrique_mere = cequetuveux
              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
    si c'est ce que je pense, ca donne ca.

    Par contre, pour la prochaine fois, si tu veux avoir des réponses précises, dis en français ce que tu veux obtenir, parceque là, c'est limite pas clair

  15. #15
    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
    c'est resolu mnt c'est çe ce que je veux
    merci

+ 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