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

SQL Firebird Discussion :

Jointure compliqué


Sujet :

SQL Firebird

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2002
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 33
    Points : 20
    Points
    20
    Par défaut Jointure compliqué
    je programme en delphi et Interbase
    j'ai besoin de conseil et d'une requete sql
    exple

    table1 ( 50000 ligne enreg)
    ___________________________________
    CODE ARTICLE CUMUL DISPO
    __________________________________
    TY1 AAAA 10 2
    DR8 AABB 20 5
    GH3 VVCC 25 10
    SQ7 DDEE 25 10
    HH8 EEAA 40 38
    __________________________________


    TABLE 2 ( 50000 a 20000 lignes enreg)
    __________________________________
    CODE ARTICLE CONSOM
    __________________________________
    TY1 AAAA 8
    DR8 AABB 10
    GH3 VVCC 5
    SQ7 DDEE 15
    SQ7 DDEE -4
    __________________________________


    TABLE 3 ( 50000 a 20000 lignes enreg)
    __________________________________
    CODE ARTICLE CONSOM
    __________________________________
    HH8 EEAA 2
    DR8 AABB 10
    GH3 VVCC 5
    GH3 VVCC -5
    __________________________________

    je cherche à réaliser une sortie comme ceci
    es ce que je dois créer une table vue
    avec un jointure ou une 4eme table phisique
    remarque j'ai n'ai pas eu idée comment
    construire une jointure de la sorte



    table 4
    _________________________________________________________
    CODE ARTICLE CUMUL DISPO CONSOM ecart
    _________________________________________________________
    TY1 AAAA 10 2 8 0 normal
    DR8 AABB 20 5 20 +5 anormal
    GH3 VVCC 25 10 5 5 normal
    SQ7 DDEE 25 10 11 -4 anormal
    HH8 EEAA 40 40 0 0 normal
    _________________________________________________________


    merci à tous
    Ada_b

  2. #2
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Vous avez beaucoup de redondance d'information, ce qui est un peu incompatible avec la normalisation des données et l'utilisation d'un SGBD. Ou le principe général justement d'éviter la duplication d'une même information (sauf probleme technique).

    Table 2 et table 3 sont identiques pourquoi n'avoir pas qu'une seule table ?

    Mis à part cette remarque, pour ce qui est de votre probleme
    la solution dépend de votre SGBD

    Si vous utilisez Interbase 6 ou inf il vous faudra passer par une PS ou avoir un résultat un peu différent et le traiter par le client.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T1.CODE_ART, T1.CUMUL, T1.DISPO, sum(T2.conso) CONSO_TABLE2 ,sum(T3.conso) COMSO_TABLE3
    FROM TABLE1 T1
    left join table2 T2 on (T2.code_art=T1.code_art)
    left join table3 T3 on (T3.code_art=T1.code_art)
    group by T1.CODE_ART, T1.CUMUL, T1.DISPO
    En effet on ne peut pas faire directement sum(T2.conso) + sum(T3.conso) car il suffit qu'un des deux sum soit à null pour que l'ensemble soit null.

    Par contre si vous travaillez avec Firebird 1.5 (ou peut etre interbase 7.1 ? je n'ai pas vérifié si la fonction existe)

    Vous pouvez utiliser la fonction SQL COALESCE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT T1.CODE_ART, T1.CUMUL, T1.DISPO, 
      sum(coalesce(T2.conso,0)) + sum(Coalesce(T3.conso,0)) COMSO,
      T1.DISPO- (T1.CUMUL - (sum(coalesce(T2.conso,0)) + sum(Coalesce(T3.conso,0)))) ECART
    FROM TABLE1 T1
    left join table2 T2 on (T2.code_art=T1.code_art)
    left join table3 T3 on (T3.code_art=T1.code_art)
    group by T1.CODE_ART, T1.CUMUL, T1.DISPO
    Et pour le fun on peux même gérer le libellé normal/anormal en SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT T1.CODE_ART, T1.CUMUL, T1.DISPO, sum(coalesce(T2.conso,0)) + sum(Coalesce(T3.conso,0)) COMSO, T1.DISPO- (T1.CUMUL - (sum(coalesce(T2.conso,0)) + sum(Coalesce(T3.conso,0)))) ECART,
    case T1.DISPO- (T1.CUMUL - (sum(coalesce(T2.conso,0)) + sum(Coalesce(T3.conso,0))))
      when 0 then 'Normal'
      else 'Anormal'
    end Libelle_Ecart
    FROM TABLE1 T1
    left join table2 T2 on (T2.code_art=T1.code_art)
    left join table3 T3 on (T3.code_art=T1.code_art)
    group by T1.CODE_ART, T1.CUMUL, T1.DISPO
    Bonne continuation.

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2002
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 33
    Points : 20
    Points
    20
    Par défaut mm sujet
    Merci Barbibulle

    Barbibulle à écrit:
    Vous avez beaucoup de redondance d'information
    =======================================

    réponse

    c'est très normal un article peut sortir(apparaitre) sur
    plusieur lignes et sur les 2 tables , jusq'au épuisement
    __________________________________________

    Barbibulle à écrit:
    Table 2 et table 3 sont identiques pourquoi n'avoir pas qu'une seule table ?
    ============================================
    réponse

    pas possible , les comptes de l'entreprise se retrouve très bien
    avec 2 tables une pour le Local et une autre pour les autres régions
    ____________________________________________

    Je travail pour le moment avec Interbase , mais on ne sais jamais
    je peux changer suivant le demande ou les contradictions
    moralité je veux garder toujours une programmation standard

    Merci encore pour les req de jointure sql
    Salut à Bientôt

  4. #4
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut Re: mm sujet
    Citation Envoyé par ada_b
    Barbibulle à écrit:
    Table 2 et table 3 sont identiques pourquoi n'avoir pas qu'une seule table ?
    ============================================
    réponse

    pas possible , les comptes de l'entreprise se retrouve très bien
    avec 2 tables une pour le Local et une autre pour les autres régions
    Oui et bien pourquoi ne pas utiliser quand même une seule table ?
    En modélisation merise c'est le résultat que vous aurriez du optenir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Table 2:
      Code_article
      Consom
      Region
    Ainsi tous vos mouvements de stoque se trouvent dans la même table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Code_art Consom Region
    TY1 AAAA      8 Local
    DR8 AABB     10 Local
    GH3 VVCC      5 Local
    SQ7 DDEE     15 Local
    SQ7 DDEE     -4 Local
    HH8 EEAA      2 Region1
    DR8 AABB     10 Region2
    GH3 VVCC      5 Region1
    GH3 VVCC     -5 Region3
    vos requetes et programmes n'en serait que plus simple et performants.
    De plus l'ajout de la gestion d'une autre région serait simple alors que dans votre solution vous seriez probablement obligé de créer une nouvelle table.

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2002
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 33
    Points : 20
    Points
    20
    Par défaut mm sujet
    Merci bien barbibulle
    d'abord exusez moi pour le retard
    c'est difficile pour moi pour de resté plus de 10 mn connecté

    réponse :
    oui c'est vrai j'ai déja proposer ça
    mais il ya des choses ;qui ne dependent pas de moi
    et je ne peux pas dire plus que ça ,ça serait violé le secret prof


    je vais stucturé une table auxiliaire
    à partir du client pour ne pas pénaliser le serveur
    je vais pomper les infos des 3 tables et les mettres dans celle-ci
    j'espère que ça marchera .


    merci comme meme pour vos conseils , il me seront bien utiles
    pour l'application de comptabilité que je vais commencer
    à partir janvier 05

    merci bien

    Ada_B

  6. #6
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut Re: mm sujet
    Citation Envoyé par ada_b
    je vais stucturé une table auxiliaire
    à partir du client pour ne pas pénaliser le serveur
    je vais pomper les infos des 3 tables et les mettres dans celle-ci
    j'espère que ça marchera .
    Ca risque d'être encore moins performant que la requete a trois jointures car chaque client devra rapatrier ces trois tables.

    Essayer plutot de créer une vue basé sur cette requete ca devrait être un peu plus performant que de l'exécuter depuis un client.

  7. #7
    Membre à l'essai
    Inscrit en
    Juillet 2002
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 33
    Points : 20
    Points
    20
    Par défaut mm sujet
    créer une vue basé sur cette requete

    merci je crois que c'est sa la solution

  8. #8
    Membre à l'essai
    Inscrit en
    Juillet 2002
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 33
    Points : 20
    Points
    20
    Par défaut mm
    merci je crois que c'est ça la solution

Discussions similaires

  1. Jointure un peu compliquée
    Par Idefix69 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 28/06/2013, 16h28
  2. Jointure imbriquée compliquée
    Par vidad10 dans le forum Requêtes
    Réponses: 4
    Dernier message: 05/08/2010, 09h00
  3. Jointures externes compliquées.
    Par Fredo02 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 06/04/2010, 15h11
  4. Jointure compliquée
    Par jonmeyer dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/12/2005, 19h50
  5. Jointure externe compliquée
    Par miniil dans le forum Langage SQL
    Réponses: 9
    Dernier message: 19/02/2004, 09h27

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