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 :

Problème SQL dans une bdd de projets et de chef


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2003
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 80
    Points : 35
    Points
    35
    Par défaut Problème SQL dans une bdd de projets et de chef
    Bonjour à tous,

    Voici l'extrait de ma base de données :
    J'ai 3 tables :

    Une table utilisateur avec leur identifiant et leur profil, leur profil peut-être soit de type "Employé" soit de type "Chef" :

    UTILISATEUR
    ---------------
    UT_ID
    UT_PROFIL

    J'ai ensuite une table PROJET qui contient nottamanent le chef de projet tiré de la table UTILISATEUR avec un UT_PROFIL="Chef" :

    PROJET
    ---------
    PR_ID
    UT_ID

    Et, j'ai enfin une table SOUS_PROJET qui contient ceux qui participent au projet :

    SOUS_PROJET
    ----------------
    SSPR_ID
    PR_ID
    UT_ID

    Dans cette table, j'ai principalement des utilisateurs qui sont des employés. Mais, je peut avoir parfois un utilisateur dans cette table qui soit chef.
    La requête que je voudrais créer est de faire apparaitre tous les projets avec leur chef. Le chef est normalement celui de la table PROJET mais si pour un PROJET dans la table SOUS_PROJET, il apparait un chef , c'est lui qu'il faut afficher.
    J'éspère avoir été clair...

    Merci de votre aide et de votre attention.

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT p.pr_id, COALESCE(MAX(u.ut_id),   p.ut_id)
    FROM dvp_projet p INNER JOIN dvp_sous_projet sp      ON p.pr_id = sp.pr_id 
                      LEFT OUTER JOIN dvp_utilisateur u  ON sp.ut_id = u.ut_id 
                                                        AND u.ut_profil = 1
    GROUP BY p.pr_id, p.ut_id
    ORDER BY p.pr_id;
    Ce code ne fonctionne bien que s'il y a au plus un chef de projet dans la table sous_projet, pour un projet donné, sinon, elle renvoie le plus grand Id, ce qui n'a pas forcément de sens.

    Comme tu n'as pas indiqué ton SGBD, sa version etc.. (lis les règles du forum), j'ai utilisé du SQL normé.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2003
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 80
    Points : 35
    Points
    35
    Par défaut
    Merci de ton aide, je travaille sous SQL SERVER.
    Il peut y avoir plusieurs chefs pour un projet dans la table SOUS_PROJET.
    Je cherche à afficher tous les utilisateurs d'un projet et s'il n'y a pas de chef pour un projet dans la table sous projet, alors, j'affiche en plus le chef de la table PROJET.

    Je voudrais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    PR_ID     UT_ID
    -----     ------
    PR1        UT1_Chef (Chef issu de la table PROJET car il n'y a pas de chef dans la table      PR1        UT2_Emp    SOUS_PROJET pour PR1)
    PR1        UT3_Emp
    PR1        UT4_Emp
     
    PR2        UT6_Emp
    PR2        UT5_Chef (Chef issu de la table SOUS_PROJET et dans ce cas on affiche pas le chef de la table PROJET car il en existe déjà un dans la table SOUS_PROJET)
    J'ai fait une requête qui selectionne tous les PR_ID avec en face l' UT_ID :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT PR_ID, UT_ID FROM SOUS_PROJET
    Je pensais faire une requête qui sélectionne les chefs que l'on utilise de la table PROJET quand il n'y a en a pas dans la table SOUS_PROJET et faire une union sur la requête précédante. Pourriez-vous m'aider à faire cette dernière requête ou proposer une autre méthode.
    Merci

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2003
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 80
    Points : 35
    Points
    35
    Par défaut
    Voilà ma solution :

    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 PR2._ID, PR2.UT_ID
    FROM PROJET PR2
    WHERE PR2.PR_ID
    IN (
      SELECT PR.PR_ID
      FROM PROJET PR
      WHERE PR.PR_ID NOT 
      IN (
        SELECT SSPR.PR_ID
        FROM SOUS_PROJET SSPR
        INNER JOIN UTILISATEUR UT ON ( UT.UT_ID = SSPR.UT_ID ) 
        WHERE (
        UT.UT_PROFIL = 'Chef'
        )
      )
    )

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

Discussions similaires

  1. Problème SQL dans une base Oracle
    Par novadga dans le forum SQL
    Réponses: 2
    Dernier message: 29/07/2013, 15h14
  2. Problème intégration feuille Excel dans une bdd sql server
    Par soufiane669 dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 29/07/2010, 10h06
  3. Problème : insertion dans une BDD ACCESS avec VB
    Par Dorni dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 19/05/2009, 14h35
  4. Réponses: 8
    Dernier message: 04/07/2007, 12h51
  5. [C#] Problème de requetes en Sql dans une form fille
    Par padodanle51 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/05/2006, 11h32

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