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 :

[Access] Problème de construction de requête


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 52
    Points : 44
    Points
    44
    Par défaut [Access] Problème de construction de requête
    Bonjour !
    J'ai un problème avec une requête SQL.
    J'expose mon problème :
    A un contrat correspond un employé, une date de création, une date de début, un type, une catégorie et des fois un enseignement.
    Le champ employé fait référence à une table EMPLOYE, le champ type, tout comme catégorie, à la table de paramètre et l'enseignement à la table T_ENSEIGNEMENT.
    La table de paramètres contient un code (param_code) clé primaire et un texte (param_texte).

    Mon problème est d'afficher les différents champs cités plus haut de tous les contrats d'un employé avec à la place du code paramètre pour le type et la catégorie leur texte respectif et l'intitulé_enseignement pour le cas ou un enseignement est présent !

    Pour le moment j'ai ça mais j'arrive pas à compléter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT contrat_datecreation AS [Créé le], contrat_datedeb AS [Début validité], contrat_type AS Type, contrat_categorie AS Etat, T_ENSEIGNEMENT.Intitulé_enseigmt As [Enseignement associé]
    FROM T_CONTRAT
    WHERE contrat_numemp=21;

    Si quelqu'un sait comment faire, n'hésitez surtout pas !

  2. #2
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Le mieux c'est que :

    1) Tu indiques ton SGBD
    2) Tu donnes les scripts de creation de tes tables
    3) Tu donnes un jeu d'essai pour chacune d'elles

    Si en plus de cela tu nous dis explicitement ce que tu veux en resultat, alors y'a des chances que quelqu'un t'aide

    Bon courage

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 52
    Points : 44
    Points
    44
    Par défaut
    Alors :
    Mon SGBD c'est Access (d'où pas de script de création de tables )
    mais ma table paramètres est ainsi :
    T_PARAM :
    -> param_code {clé primaire}
    -> param_texte
    -> param_num
    -> param_num2

    [exemple :
    'CAT0001', 'Avenant', 0, 0
    'CAT0002', 'Contrat', 0, 0
    'ETA0001', 'En attente, 0, 0
    'ETA0002, 'Validé', 0, 0
    ......
    ]

    Elle contient tout type de paramètres (tous ceux nécessaires à mon application).

    et la deuxième table importante est la table contrat.
    Je ne vais faire la liste que des champs utiles parce qu'elle serait trop longue :
    T_CONTRAT :
    --> contrat_num {clé primaire}
    --> contrat_datedeb
    --> contrat_type
    --> contrat_categorie
    --> contrat_etat
    --> contrat_numemp (numéro d'employé)
    --> contrat_numenseignement (numéro de l'enseignement) {optionnel}
    --> contrat_datecreation
    je rappelle donc que les champs contrat_type, contrat_categorie et contrat_etat sont reliés à la table T_PARAM, le champ contrat_numemp à la table des EMPLOYE et le champ contrat_numenseignement à la table T_ENSEIGNEMENT.

    [ex :
    1, 11/11/1111, 'VAC0001', 'CAT0001', 'ETA0001', 1, NULL, 11/11/1111
    2, 11/11/1111, 'VAC0001', 'CAT0003', 'ETA0002', 5, 2, 11/11/1111
    ]

    ce que je veux c'est d'avoir la liste pour un employé donné de tous ses contrats avec les informations suivantes :
    datedeb
    texte du type (dans la table T_PARAM)
    texte de la categorie (dans la table T_PARAM)
    texte de l'etat (dans la table T_PARAM)
    libellé d'enseignement (dans la table T_ENSEIGNEMENT)

    Merci par avance de vos réponses !

  4. #4
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    un truc dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT
    	t_contrat.* , param1.texte, param2.texte, param3.texte,t_enseignement.libelle FROM
    	t_contrat ,
    	t_param as param1,
    	t_param as param2,
    	t_param as param3,
    	t_enseignement 
    WHERE
    	param3.code = t_contrat.contrat_type AND
    	param2.code = t_contrat.contrat_categorie AND
    	param1.code = t_contrat.contrat_etat
    	AND t_enseignement.code = t_contrat.contrat_numenseignement
    Cependant, il faudrait faire une jointure externe entre t_enseignement et t_contrat (par la clé etrangere) car si c'est optionnel et qu'il n'y a rien dans t_enseignement associé alors, cela ne t'enverra pas la ligne.
    En sql normalisé c'est le OUTER JOIN, mais sous ACCESS, je ne sais pas si cela fonctionne.

    J'espere t'avoir fait avancer un peu
    Bon courage

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 52
    Points : 44
    Points
    44
    Par défaut
    Un grand merci pour ton aide, j'obtient maintenant toutes les liaisons que je voulais avec ma table T_PARAM, mais j'ai beau chercher, je n'arrive toujours pas à avoir celle entre t_contrat.contrat_numenseignement et t_enseignement.enseignement_num pour retrouver t_enseignement.Intitulé_enseigmt.
    Comme il arrive que contrat_numenseignement soit à NULL, je trouve pas comment faire...

    Si quelqu'un voit, toute aide serrait la bienvenue !

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 52
    Points : 44
    Points
    44
    Par défaut
    J'ai fini par trouver quelque chose qui marche : j'ai utilisé un 'union'.
    La requête est un peu lourde du coup, mais le résultat est bon.
    Pour information, voilà la bête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT t_contrat.contrat_num, t_contrat.contrat_datecreation, param1.param_texte, param2.param_texte, param3.param_texte, t_enseignement.Intitulé_enseigmt
    FROM t_contrat, t_param AS param1, t_param AS param2, t_param AS param3, t_enseignement
    WHERE param1.param_code=t_contrat.contrat_type And param2.param_code=t_contrat.contrat_categorie And param3.param_code=t_contrat.contrat_etat and t_enseignement.enseignement_num=t_contrat.contrat_numenseignement order by t_contrat.contrat_datecreation
     
    UNION
     
    SELECT t_contrat.contrat_num, t_contrat.contrat_datecreation, param1.param_texte, param2.param_texte, param3.param_texte, t_contrat.contrat_numenseignement
    FROM t_contrat, t_param AS param1, t_param AS param2, t_param AS param3
    WHERE param1.param_code=t_contrat.contrat_type And param2.param_code=t_contrat.contrat_categorie And param3.param_code=t_contrat.contrat_etat and t_contrat.contrat_numenseignement is null order by t_contrat.contrat_datecreation;
    Encore merci pour m'avoir aidé !

  7. #7
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Avec une jointure externe, tu te dispensais d'un UNION, qui est tres dommageable pour les performances de ton appli

    Bon Courage

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

Discussions similaires

  1. Problème de construction de requête !
    Par feasil dans le forum Access
    Réponses: 5
    Dernier message: 18/04/2006, 10h36
  2. Problème de construction de requête !
    Par feasil dans le forum Access
    Réponses: 1
    Dernier message: 12/04/2006, 20h02
  3. [Access] Probléme de requête
    Par Striker96 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 03/02/2006, 16h38
  4. Réponses: 3
    Dernier message: 11/10/2004, 17h26

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