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 :

Tableaux croisés, possible ou pas avec SQL?


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Tableaux croisés, possible ou pas avec SQL?
    Hello,
    Voila mon problème est simple mais je suis incapable d'y trouver une solution.
    J'ai les 3 tables suivantes:


    Et je voudrais simplement avoir la liste suivante:


    Comment puis je faire, ça à l'air simple mais je ne trouve pas la solution pour avoir les numéros de téléphone et de fax sur la même ligne.

    Si vous pouviez m'aider!

    Merci d'avance.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Salut,
    Essaie comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    select c.cli,
           c.name,
           max(case when cc.type='FAX' then cc.numero else NULL end) as num_fax,
           max(case when cc.type='FAX' then i.texte else NULL end) as indicatif_fax,
           max(case when cc.type='TEL' then cc.numero else NULL end) as num_tel,
           max(case when cc.type='TEL' then i.texte else NULL end) as indicatif_tel
    from t_client c
    JOIN t_client_coord cc ON c.cli=cc.cli
    JOIN t_indicatif i ON cc.indicatif=i.ind
    group by c.cli,c.name
    [EDIT] suppression sous-requête inutile.

  3. #3
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 285
    Points : 11 740
    Points
    11 740
    Par défaut
    ça n'a rien d'un tableau croisé, on peut donc faire plus simplement, en utilisant des alias de table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT C.CLI, C.NAME, 
      Fax.NUMERO AS NoFAX, IFax.Texte AS Indicatif_Fax,
      Tel.NUMERO AS NoTEL, TFax.Texte AS Indicatif_Tel
    FROM T_CLIENT C
      INNER JOIN T_CLIENT_COORD Fax ON C.CLI = Fax.CLI AND Fax.TYPE = 'FAX'
      INNER JOIN T_INDICATIF IFax ON Fax.INDICATIF = IFax.IND
      INNER JOIN T_CLIENT_COORD Tel ON C.CLI= Tel.CLI AND Tel.TYPE = 'TEL'
      INNER JOIN T_INDICATIF ITel ON Tel.INDICATIF = ITel.IND

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Antoun Voir le message
    ça n'a rien d'un tableau croisé, on peut donc faire plus simplement, en utilisant des alias de table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT C.CLI, C.NAME, 
      Fax.NUMERO AS NoFAX, IFax.Texte AS Indicatif_Fax,
      Tel.NUMERO AS NoTEL, TFax.Texte AS Indicatif_Tel
    FROM T_CLIENT C
      INNER JOIN T_CLIENT_COORD Fax ON C.CLI = Fax.CLI AND Fax.TYPE = 'FAX'
      INNER JOIN T_INDICATIF IFax ON Fax.INDICATIF = IFax.IND
      INNER JOIN T_CLIENT_COORD Tel ON C.CLI= Tel.CLI AND Tel.TYPE = 'TEL'
      INNER JOIN T_INDICATIF ITel ON Tel.INDICATIF = ITel.IND

    Merci à vous deux, j'ai réussi grace à vous.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/02/2013, 17h28
  2. [2.5.2] Possible ou pas avec un Data Cube ?
    Par ddelle007 dans le forum BIRT
    Réponses: 4
    Dernier message: 30/07/2010, 11h59
  3. Exécution pas à pas avec SQL Server 2005
    Par funkyjul dans le forum Développement
    Réponses: 12
    Dernier message: 06/03/2009, 10h59
  4. Possible ou pas avec SendMessage
    Par load.exe dans le forum Débuter
    Réponses: 4
    Dernier message: 12/11/2008, 17h54
  5. Réponses: 1
    Dernier message: 22/07/2008, 10h48

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