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 :

Pb de requete


Sujet :

Langage SQL

  1. #1
    Expert éminent

    Avatar de freegreg
    Profil pro
    Inscrit en
    Août 2002
    Messages
    4 376
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2002
    Messages : 4 376
    Points : 8 779
    Points
    8 779
    Par défaut Pb de requete
    Bonjour,


    Contexte :
    J'ai 4 tables :
    T_CL_CLIENT
    CL_ID pk
    CL_LABEL
    ...

    T_CA_CATEGORY
    CA_ID pk
    CA_LABEL
    ...

    T_TK_TASK
    TK_ID pk
    TK_CA_ID fk
    ...

    et enfin

    T_TC_TASK_TO_CLIENT
    TC_ID pk
    TC_CL_ID fk
    TC_TK_ID fk

    Chaque categorie peut avoir plusieurs taches et chaque client ne peut avoir au plus qu'une tache par categorie (0,1)

    Ce que je veux faire :
    Récupérer pour chaque client s'il a une tache ou pas pour chacune des catégories
    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CL_LABEL CA_LABEL ETAT
      cl1      cat1     0
      cl1      cat2     1
      cl1      cat3     1
      cl2      cat1     1
      cl2      cat2     0
      cl2      cat3     1
    Ce que je sais faire :
    J'arrive facilement (c'était pas trop dur ) à récupérer les categories pour lesquelles le client à une taches à faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT CL_LABEL, CA_LABEL, 1 AS ETAT
    FROM T_CA_CATEGORY
    	INNER JOIN T_TK_TASK ON TK_CATEGORY_ID = CA_ID
    	INNER JOIN T_TC_TASK_TO_CLIENT ON TC_TASK_ID = TK_ID
    	INNER JOIN T_CL_CLIENT  ON CL_ID = TC_CL_ID
    ORDER BY CL_ID, CA_ID
    Par contre, je n'arrive pas récupérer les categories pour lesquelles mes clients n'ont pas de taches
    Est-ce que qq'un a une idée ? une piste ?

    d'avance


    Ps: Si vous avez une idée pour obtenir un résultat de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CL_LABEL cat1 cat2 cat3
      cl1     0    1    1
      cl2     1    0    1
    Ca me va aussi, mais rien que la 1ere me réjouirait
    encore

    Ps2: Je suis sur sql Server 2005 mais je ne pense pas ce soit très important

    Ps3: Désolé, je n'ai pas trouvé de titre plus explicite

  2. #2
    Membre confirmé Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Points : 481
    Points
    481
    Par défaut
    Bonjour,

    Un produit cartésien défini ton périmètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select CL_ID, CL_LABEL, CA_ID, CA_LABEL from T_CL_CLIENT, T_CA_CATEGORY
    Une sous-requête peut récupérer les couples client/catég. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select TC_CL_ID, TK_CA_ID from TC_TASK_TO_CLIENT INNER JOIN T_TK_TASK on TC_TASK_TO_CLIENT.TC_TK_ID = T_TK_TASK.TK_ID
    En couplant tout ça avec une jointure externe ça devrait être bon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select A.CL_LABEL, A.CA_LABEL, (case when B.TC_CL_ID is null then 0 else 1 end)
    from
       (select CL_ID, CL_LABEL, CA_ID, CA_LABEL from T_CL_CLIENT, T_CA_CATEGORY) A
            LEFT OUTER JOIN (select TC_CL_ID, TK_CA_ID from TC_TASK_TO_CLIENT INNER JOIN T_TK_TASK on TC_TASK_TO_CLIENT.TC_TK_ID = T_TK_TASK.TK_ID) B
                ON (A.CL_ID = B.TC_CL_ID and A.CA_ID = B.TK_CA_ID)
    ORDER BY A.CL_ID, A.CA_ID

  3. #3
    Expert éminent

    Avatar de freegreg
    Profil pro
    Inscrit en
    Août 2002
    Messages
    4 376
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2002
    Messages : 4 376
    Points : 8 779
    Points
    8 779
    Par défaut
    je regarde ça de suite
    Je te tiens au courant

  4. #4
    Expert éminent

    Avatar de freegreg
    Profil pro
    Inscrit en
    Août 2002
    Messages
    4 376
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2002
    Messages : 4 376
    Points : 8 779
    Points
    8 779
    Par défaut
    Ca a été un peu long pour vérifier car j'avais "vachement" simplifié le pb dans ma description
    Mais le principal c'est que ça marche impécable.

    beaucoup

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

Discussions similaires

  1. requete avec OBCD et visual c++
    Par Anonymous dans le forum MFC
    Réponses: 12
    Dernier message: 18/11/2004, 16h15
  2. Requete requête sous sybase
    Par eddie dans le forum Sybase
    Réponses: 3
    Dernier message: 02/04/2003, 14h51
  3. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 11h24
  4. Resultat requete SQL
    Par PierDIDI dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/07/2002, 13h43
  5. [Kylix] Requetes Kylix pour postgres
    Par Miltown dans le forum EDI
    Réponses: 1
    Dernier message: 29/05/2002, 20h22

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