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 :

Requête excluant certaines informations


Sujet :

Langage SQL

  1. #1
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut Requête excluant certaines informations
    Bonjour,

    J'ai une petite requête qui me fait vieillir prématurément et pourtant c'est du déjà vu, mais bon.

    J'ai 3 tables :

    A) La table des comptes bancaires
    B) La table des mois de mouvements sur compte bancaire
    C) La table des mouvements des mois de comptes bancaires

    Relation A-B = 1-N/1-1 sur l'id du n° de compte
    Relation B-C = 1-N/1-1 sur l'id du mois de mouvements

    J'ai donc créé la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT maj_compte_bancaire.compte_id, id_maj_tiers, cpt_type_id, cpt_code_banque, cpt_code_guichet, cpt_code_compte, cpt_code_cle_rib, cpt_date_debut, cpt_date_fin, maj_compte_bancaire.id_trt, maj_banque_mvt.id_mvt, id_exercice, mvt_bq_montant,mvt_bq_sens_dc FROM `maj_compte_bancaire` LEFT OUTER JOIN maj_banque_mvt ON maj_compte_bancaire.compte_id=maj_banque_mvt.compte_id LEFT OUTER JOIN maj_banque_mvt_lignes ON maj_banque_mvt.id_mvt=maj_banque_mvt_lignes.id_mvt WHERE maj_compte_bancaire.id_maj=1 AND id_exercice=3 AND maj_compte_bancaire.id_trt BETWEEN 1 AND 4 AND maj_banque_mvt.id_trt BETWEEN 1 AND 4 AND maj_banque_mvt_lignes.id_trt BETWEEN 1 AND 4 ORDER BY `cpt_type_id`,`cpt_code_banque`, cpt_code_guichet, cpt_code_compte,cpt_code_cle_rib
    J'ai oublié quelque chose dans cette requête parceque je ne me retrouve qu'avec les comptes qui ont des mouvements mensuels.

    Or ce que je veux ce sont tous les comptes qu'ils aient ou pas des mouvements.

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 309
    Points : 15 641
    Points
    15 641
    Par défaut
    j'ai mis des retours à la ligne dans ta requête pour qu'elle soit plus simple à lire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT maj_compte_bancaire.compte_id, id_maj_tiers, cpt_type_id, cpt_code_banque, cpt_code_guichet, cpt_code_compte, cpt_code_cle_rib, cpt_date_debut, cpt_date_fin, maj_compte_bancaire.id_trt, maj_banque_mvt.id_mvt, id_exercice, mvt_bq_montant,mvt_bq_sens_dc
    FROM `maj_compte_bancaire`
    LEFT OUTER JOIN maj_banque_mvt
        ON maj_compte_bancaire.compte_id=maj_banque_mvt.compte_id
    LEFT OUTER JOIN maj_banque_mvt_lignes
        ON maj_banque_mvt.id_mvt=maj_banque_mvt_lignes.id_mvt
    WHERE maj_compte_bancaire.id_maj=1
    AND id_exercice=3
    AND maj_compte_bancaire.id_trt BETWEEN 1 AND 4
    AND maj_banque_mvt.id_trt BETWEEN 1 AND 4
    AND maj_banque_mvt_lignes.id_trt BETWEEN 1 AND 4
    ORDER BY `cpt_type_id`,`cpt_code_banque`, cpt_code_guichet, cpt_code_compte,cpt_code_cle_rib
    le problème est que tu fais des contraintes, sur le champ "maj_banque_mvt.id_trt" par exemple, qui fait que les mouvements qui sont à NULL parce qu'il n'y en a pas sont filtrés
    tu dois revoir tes contraintes sur les tables qui sont en jointures externes

  3. #3
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Existe-t-il un moyen de dire que je prend tous les comptes, même s'il n'ont pas de mouvements ?

    L'objectif est de présenter l'ensemble des comptes bancaires avec le cumul des débits et des crédits.

    Donc, j'ai des comptes sans mouvement.

    S'il y a mouvements, alors je ne dois prendre que les mouvements de l'exercice en cours.

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 309
    Points : 15 641
    Points
    15 641
    Par défaut
    essaye quelque chose comme ça :
    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
    SELECT maj_compte_bancaire.compte_id, id_maj_tiers, cpt_type_id, cpt_code_banque, cpt_code_guichet, cpt_code_compte, cpt_code_cle_rib, cpt_date_debut, cpt_date_fin, maj_compte_bancaire.id_trt, maj_banque_mvt.id_mvt, id_exercice, mvt_bq_montant,mvt_bq_sens_dc
    FROM `maj_compte_bancaire`
    LEFT OUTER JOIN maj_banque_mvt
        ON maj_compte_bancaire.compte_id=maj_banque_mvt.compte_id
    LEFT OUTER JOIN maj_banque_mvt_lignes
        ON maj_banque_mvt.id_mvt=maj_banque_mvt_lignes.id_mvt
    WHERE maj_compte_bancaire.id_maj=1
    AND id_exercice=3
    AND maj_compte_bancaire.id_trt BETWEEN 1 AND 4
    AND (ISNULL(maj_banque_mvt.id_mvt)
        OR maj_banque_mvt.id_trt BETWEEN 1 AND 4
    )
    AND (ISNULL(maj_banque_mvt_lignes.id_mvt)
        OR maj_banque_mvt_lignes.id_trt BETWEEN 1 AND 4
    )
    ORDER BY `cpt_type_id`,`cpt_code_banque`, cpt_code_guichet, cpt_code_compte,cpt_code_cle_rib

  5. #5
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Oui c'est ça avec une petite modif que tu ne pouvais pas voir sur l'exercice, ce qui donne ceci :

    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
    SELECT maj_compte_bancaire.compte_id, id_maj_tiers, cpt_type_id, cpt_code_banque, cpt_code_guichet, cpt_code_compte, cpt_code_cle_rib, cpt_date_debut, cpt_date_fin, maj_compte_bancaire.id_trt, maj_banque_mvt.id_mvt, id_exercice, mvt_bq_montant,mvt_bq_sens_dc
    FROM `maj_compte_bancaire`
    LEFT OUTER JOIN maj_banque_mvt
        ON maj_compte_bancaire.compte_id=maj_banque_mvt.compte_id
    LEFT OUTER JOIN maj_banque_mvt_lignes
        ON maj_banque_mvt.id_mvt=maj_banque_mvt_lignes.id_mvt
    WHERE maj_compte_bancaire.id_maj=1
    AND maj_compte_bancaire.id_trt BETWEEN 1 AND 4
    AND (ISNULL(maj_banque_mvt.id_mvt)
        OR maj_banque_mvt.id_trt BETWEEN 1 AND 4
        AND id_exercice=3
    )
    AND (ISNULL(maj_banque_mvt_lignes.id_mvt)
        OR maj_banque_mvt_lignes.id_trt BETWEEN 1 AND 4
    )
    ORDER BY `cpt_type_id`,`cpt_code_banque`, cpt_code_guichet, cpt_code_compte,cpt_code_cle_rib
    Merci beaucoup

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

Discussions similaires

  1. [RegEx] Extraire une URL en excluant certaines extensions
    Par marciv dans le forum Langage
    Réponses: 2
    Dernier message: 13/04/2007, 04h33
  2. où sont loggées certaines informations?
    Par lichman dans le forum Debian
    Réponses: 1
    Dernier message: 01/02/2007, 16h11
  3. Extraire certaines informations depuis un fichier
    Par maxxou91 dans le forum Langage
    Réponses: 3
    Dernier message: 04/05/2006, 19h56
  4. Récupérer certaines informations système
    Par Leobaillard dans le forum Composants VCL
    Réponses: 13
    Dernier message: 23/12/2005, 10h54

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