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 multitables donnant un résultat dont des données dont affichées en lignes au lieu de colonnes


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2012
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Requête multitables donnant un résultat dont des données dont affichées en lignes au lieu de colonnes
    Bonjour,


    J'ai la requête ci-dessous qui me donne 2 lignes pour une personne sur la rubrique X6 de la table 1: une pour le mail pro l'autre pour le mail perso. Je souhaite avoir le même résultat mais avec une colonne pour le mail pro et l'autre pour le mail perso. Comment modifier ma requête...très simplement....car je suis très loin de maitriser....

    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
    18
    select distinct b.X1, c.X2, c.X3 as "nom usuel", c.x4 as "nom naissance", c.X5, a.X6 as "mail pro et mail perso", 
    a.X5 as "mail", b.X6  as "position admi", g.X7 as "Libellé long", g.X8 as "Lib court",
    d.X8 as "DIRECTION A", e.dX9 as "DIRECTION B"
    from table1 a, table2 b, table3 c, table4 d, table5 e, table6 f, table7 g
    where b.X6<>'PPP'
    and a.X6 in ('mail pro','mail perso')
    and b.X9='WWW'
    and b.X10 > sysdate
    and b.X6 in ('WWW', 'WWW')
    and d.X11='NNN'
    and a.X1=b.X1
    and a.X1=c.X1
    and a.X1=d.X1
    and a.X1=e.X1
    and f.X12 = 'BBB'
    and f.X13=b.X6
    and f.X1=g.X1
    order by c.X2;
    Merci

    Bonne soirée

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Pour commencer tu devrais utiliser l'opérateur JOIN pour tes jointures, la requête n'en serait que plus lisible.

    Pour la question d'origine, tu peux utiliser 2 fois la même table dans la requête, avec des alias différents:
    Code SQL : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    select distinct b.X1, c.X2, c.X3 as "nom usuel", c.x4 as "nom naissance", c.X5, a1.X6 as "mail pro",a2.X6 as "mail perso", 
    a.X5 as "mail", b.X6  as "position admi", g.X7 as "Libellé long", g.X8 as "Lib court",
    d.X8 as "DIRECTION A", e.dX9 as "DIRECTION B"
    from table1 a1
    inner join table1 a2
    on ... <= ici il faut ajouter la jointure entre a1 et a2
    inner join table2 b
    on a1.X1=b.X1
    inner join table3 c
    on and a.X1=c.X1
    inner join table4 d
    on a.X1=d.X1
    inner join table5 e
    on a.X1=e.X1
    inner join table6 f
    on f.X13=b.X6
    inner join table7 g
    on f.X1=g.X1
    where b.X6<>'PPP'
    and a1.X6 ='mail pro'
    and a2.X6  = 'mail perso'
    and b.X9='WWW'
    and b.X10 > sysdate
    and b.X6 in ('WWW', 'WWW')
    and d.X11='NNN'
    and f.X12 = 'BBB'
    order by c.X2;

    Comme tu ne nous as pas donné la structure de tes tables, il est impossible ici de savoir comment faire la jointure entre a1 et a2.

    Taatyo.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Ce serait plus facile avec la description des tables et de leur contenu, mais a priori, une table contient une ligne pour le mail pro, une autre pour le mail perso.
    Auquel cas, il suffit de faire deux jointures avec cette table sous deux alias différents pour récupérer les deux valeurs et les mettre dans deux colonnes

    Par ailleurs, les jointures normalisées avec JOIN ON existent depuis la norme SQL 1992, ce serait bien de les utiliser, c'est bien plus clair et parfois plus performant que de les mélanger avec la restriction dans la clause WHERE.

Discussions similaires

  1. Requete SQL pour filtrer et cumuler des données
    Par boutinj dans le forum Développement
    Réponses: 1
    Dernier message: 30/07/2012, 15h29
  2. [AC-2007] Enregistrement des données saisies sur 2 lignes
    Par Cercan dans le forum IHM
    Réponses: 0
    Dernier message: 15/07/2010, 15h02
  3. Ajouter des données après la dernière ligne non vide
    Par jnmab dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/11/2007, 10h21
  4. Réponses: 2
    Dernier message: 24/12/2006, 12h01
  5. Requete sql donnant un resultat croisé dynamique
    Par Brice Yao dans le forum Langage SQL
    Réponses: 4
    Dernier message: 24/07/2005, 10h38

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