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 :

2 colonnes sur même domaine de définition


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Points : 10
    Points
    10
    Par défaut 2 colonnes sur même domaine de définition
    Bonjour à tous,

    Le titre n'étant pas très parlant je vais essayer de vous expliquer mon problème.

    Contexte simplifié :

    Un étudiant appellent une hotline pour un problème. (jusque là ça va )
    Une membre de la hotline répond. Ne trouvant pas de résolution elle enregistre l'appel.

    => création de l'étudiant dans la table CMS_Customer
    => création de l'appel avec comme attribut :
    (id, date, details, resolution, statut, category, customer_id)
    => création d'une ligne dans la relation Treated_By entre l'ID de l'appel et l'ID de la personne de la hotline + la date


    Plus tard ne trouvant toujours pas de réponse, elle fait traiter l'appel par une autre personne.
    => création d'une ligne dans la relation Treated_By entre l'ID de l'appel et l'ID de la nouvelle personne de la hotline + la nouvelle date

    L'application permet de rechercher un appel. Dans le résultat de la recherche je voudrais afficher à la fois la personne qui à répondu à l'appel et celle qui le traite en ce moment.

    Voilà les tables remplies avec un exemple, et en gros ce que je souhaite obtenir :




    Voici 2 versions de la requête que je manipule depuis ce matin en vain

    Version 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT a.customer_id, a.customer_forename, a.customer_surname,  f1, s1,  f2, s2, b.full_call_id, c.full_call_category_desc,  status_desc
    FROM CMS_Customer AS a, CMS_Full_Call AS b, CMS_Full_Call_Category AS c,  CMS_Status AS e
    WHERE (b.customer_id=a.customer_id) 
    And (b.status_id=e.status_id) 
    And (b.full_call_category_id=c.full_call_category_id)
    AND f1  IN (select h.person_forename FROM CMS_Team_Member h , CMS_Treated_By  j WHERE b.full_call_id=j.full_call_id AND j.person_id=h.person_id and j.date_treatement IN (select min(k.date_treatement) FROM CMS_Treated_By k WHERE k.full_call_id=b.full_call_id))
    AND s1  IN (select h.person_surname FROM CMS_Team_Member h , CMS_Treated_By  j WHERE b.full_call_id=j.full_call_id AND j.person_id=h.person_id and j.date_treatement IN (select min(k.date_treatement) FROM CMS_Treated_By k WHERE k.full_call_id=b.full_call_id))
    AND f2  IN (select h.person_forename FROM CMS_Team_Member h , CMS_Treated_By  j WHERE b.full_call_id=j.full_call_id AND j.person_id=h.person_id and j.date_treatement IN (select max(k.date_treatement) FROM CMS_Treated_By k WHERE k.full_call_id=b.full_call_id))
    AND s2  IN (select h.person_surname FROM CMS_Team_Member h , CMS_Treated_By  j WHERE b.full_call_id=j.full_call_id AND j.person_id=h.person_id and j.date_treatement IN (select max(k.date_treatement) FROM CMS_Treated_By k WHERE k.full_call_id=b.full_call_id))
    ;
    Version 2 simplifiée pour tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT a.customer_id, a.customer_forename, a.customer_surname, g.person_forename AS pf2,  b.full_call_id, c.full_call_category_desc,  status_desc
    FROM CMS_Customer AS a, CMS_Full_Call AS b, CMS_Full_Call_Category AS c,  CMS_Status AS e, CMS_Treated_By AS f, CMS_Team_Member AS g
    WHERE (b.customer_id=a.customer_id) 
    And (b.full_call_id=f.full_call_id) 
    And (f.person_id=g.person_id) 
    And (b.status_id=e.status_id) 
    And (b.full_call_category_id=c.full_call_category_id)
    AND pf2 IN (select h.person_forename FROM CMS_Team_Member h , CMS_Customer i, CMS_Treated_By  j WHERE b.full_call_id=j.full_call_id AND j.person_id=h.person_id and j.date_treatement IN (select min(k.date_treatement) FROM CMS_Treated_By k WHERE k.full_call_id=b.full_call_id))
    ;
    Bon ok j'avoue c'est barbare, et je ne vous cache pas que biensûr la requête ne fonctionne pas, Access me demandant de renseigner les champs F1 F2 S1 S2.

    Est-ce possible d'afficher 2 colonnes prenant leurs valeurs sur le même domaine comme je souhaite le faire ?
    Si oui avez vous une solution ?
    (Si non aussi d'ailleur !)

    Merci d'avance,

    mersie_lover.

  2. #2
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    J'ai pas tout saisie de ton code mais essaye avec des sous-requête et tables "dérivées".

    La première, tu récupére F1, S1 et la seconde F2, S2.

    Au fait c'est quel SGBD ?

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par Chtulus Voir le message
    Bonjour,

    J'ai pas tout saisie de ton code mais essaye avec des sous-requête et tables "dérivées".

    La première, tu récupére F1, S1 et la seconde F2, S2.

    Au fait c'est quel SGBD ?
    Merci pour ta réponse, le SGBD est Access

    Pour les sous requêtes n'est ce pas ce que j'ai fait ici ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     f1  IN (SELECT h.person_forename FROM CMS_Team_Member h , CMS_Treated_By  j WHERE b.full_call_id=j.full_call_id AND j.person_id=h.person_id AND j.date_treatement IN (SELECT min(k.date_treatement) FROM CMS_Treated_By k WHERE k.full_call_id=b.full_call_id))
    AND s1  IN (SELECT h.person_surname FROM CMS_Team_Member h , CMS_Treated_By  j WHERE b.full_call_id=j.full_call_id AND j.person_id=h.person_id AND j.date_treatement IN (SELECT min(k.date_treatement) FROM CMS_Treated_By k WHERE k.full_call_id=b.full_call_id))
    AND f2  IN (SELECT h.person_forename FROM CMS_Team_Member h , CMS_Treated_By  j WHERE b.full_call_id=j.full_call_id AND j.person_id=h.person_id AND j.date_treatement IN (SELECT max(k.date_treatement) FROM CMS_Treated_By k WHERE k.full_call_id=b.full_call_id))
    AND s2  IN (SELECT h.person_surname FROM CMS_Team_Member h , CMS_Treated_By  j WHERE b.full_call_id=j.full_call_id AND j.person_id=h.person_id AND j.date_treatement IN (SELECT max(k.date_treatement) FROM CMS_Treated_By k WHERE k.full_call_id=b.full_call_id))
    ;
    De plus est-ce que cette syntaxe est correcte ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT  f1 [...] 
    From [...] 
    Where [...]  f1  IN (SELECT h.person_forename FROM CMS_Team_Member h , CMS_Treated_By  j WHERE b.full_call_id=j.full_call_id AND j.person_id=h.person_id AND j.date_treatement IN (SELECT min(k.date_treatement) FROM CMS_Treated_By k WHERE k.full_call_id=b.full_call_id)) [...] 
    ;

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Deux possibilités

    1. Avec une requête analyse croisée, tu as le résultat. Pour l'affichage c'est autre chose

    2. Tu peux aussi utiliser une fonction (présente dans la FAQ d'Access) qui te permet de retrouver sous forme de liste toutes les valeurs de ta colonne dans un champ d'une requête.

    exemple

    customer_id | customer_forename | Liste des intervenants

    type de requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select customer_id, customer_forename, Fonction(les parametre) as liste from ...

  5. #5
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Pour les sous requêtes n'est ce pas ce que j'ai fait ici ?
    avec des sous-requête et tables "dérivées".

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Points : 10
    Points
    10
    Par défaut
    Ne trouvant pas de réponse j'ai fait un ptit ctrl - F dans la FAQ access et les résultats que j'obtiens sont "faire ceci en fonction de celà.." mais pas de fonctions à proprement parlé.

    Un lien direct ?

    Personne n'aurrais un exemple concret ? Je cherche depuis ce matin mais je navigue de FAQ en FAQ et de tuto en tuto sans trouver de solution !

    Merci beaucoup.

  7. #7
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Ca peut peut-être marcher avec ce que je te disais :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT Table1.tonChamps AS F1, Table1.TonChamps AS S1, Table2.TonChamps AS F2, Table2.TonChamps AS S2
    FROM
            (
            SELECT tesChamps
            FROM TaTable 
            ) Table1,
                       (
                       SELECT tesChamps
                       FROM TaTable 
                       ) Table2 ;

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Points : 10
    Points
    10
    Par défaut
    Merci Chtulus pour ta réponse ça me fera un modèle pour plus tard !
    En fait mon big boss à trouvé la réponse !

    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 A.customer_id, B.customer_forename + " " + B.customer_surname AS Customer, F.person_forename + " " + F.person_surname AS Answerer, I.person_forename + " " + I.person_surname AS Treater, A.full_call_id, C.full_call_category_desc, D.status_desc
    
    FROM CMS_Full_Call A, CMS_Customer B, CMS_Full_Call_Category C, CMS_Status D, CMS_Treated_By E, CMS_Team_Member F, CMS_Treated_By H, CMS_Team_Member I
    
    WHERE A.customer_id = B.customer_id 
    AND A.full_call_category_id = C.full_call_category_id 
    AND A.status_id = D.status_id 
    AND A.full_call_id = E.full_call_id 
    AND A.full_call_id = H.full_call_id 
    
    AND E.person_id = F.person_id 
    AND E.date_treatement = (SELECT MIN(G.date_treatement) FROM CMS_Treated_By G WHERE G.full_call_id = A.full_call_id)
    
    AND H.person_id = I.person_id 
    AND H.date_treatement = (SELECT MAX(J.date_treatement) FROM CMS_Treated_By J WHERE J.full_call_id = A.full_call_id)
    
    ORDER BY A.full_call_id;
    et le résultat !



    Ah il porte bien son nom ! merci big boss !
    J'avais oublié qu'on pouvait utiliser 2 fois la même table dans le FROM !
    à tous
    Et hop =>

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

Discussions similaires

  1. Upload parallelle de plusieurs fichiers sur même domain.
    Par Fabouney dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 05/10/2009, 13h05
  2. Réponses: 3
    Dernier message: 09/07/2008, 02h25
  3. [MySQL] Comment accéder avec php à une base de données ne se trouvant pas sur le même domaine
    Par Alexandrebox dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 25/02/2008, 19h16
  4. Imprimer toutes les colonnes sur une même feuille
    Par Soulghard dans le forum Access
    Réponses: 1
    Dernier message: 02/02/2006, 13h10
  5. where sur 2 colonnes en même temps
    Par linux dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 28/10/2005, 10h16

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