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

PostgreSQL Discussion :

Des occurrences qui deviennent des champs


Sujet :

PostgreSQL

  1. #1
    Membre habitué Avatar de budtucker
    Profil pro
    Développeur multimédia
    Inscrit en
    Avril 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Avril 2007
    Messages : 176
    Points : 197
    Points
    197
    Par défaut Des occurrences qui deviennent des champs
    Bonjour tout le monde,

    Voici ma problématique :
    J'ai 3 tables sur Postgre 8 :







    Select * FROM batiment :


    Select * from caractéristique :



    Ce que je souhaiterais, c'est avoir comme résultat sur Postgre :



    Là, il s'agit d'un exemple simplifié de ma problématique. Dans la réalité, il y a plus de 100 occurences dans ma table caractéristique. Pour certains bâtiments, il y a des caractéristiques définies et d'autre non. De plus, il est très fréquents de rajouter de nouvelles caractéristiques et d'en supprimer certaines. Vous comprendrez donc que je ne puisse pas mettre ces occurences sous forme de champs dans ma table Bâtiment.

    Merci,

    A+
    Sud04

  2. #2
    Membre habitué Avatar de budtucker
    Profil pro
    Développeur multimédia
    Inscrit en
    Avril 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Avril 2007
    Messages : 176
    Points : 197
    Points
    197
    Par défaut
    Bon, puisque personne ne veut répondre, j'ai déjà trouvé un début de réponse :

    SELECT distinct nombatiment, largeur, longueur, hauteur
    FROM
    (SELECT bat.nombat as nombatiment,bat.idbat,car.valeur as largeur from caracbat car ,batiment bat WHERE car.idcarac = 'C01' AND car.idbat = bat.idbat) ss
    CROSS JOIN
    (SELECT bat.nombat as nombat,bat.idbat,car.valeur as longueur from caracbat car ,batiment bat WHERE car.idcarac = 'C02' AND car.idbat = bat.idbat) tt
    CROSS JOIN
    (SELECT bat.nombat as nombat,bat.idbat,car.valeur as hauteur from caracbat car ,batiment bat WHERE car.idcarac = 'C03' AND car.idbat = bat.idbat) vv
    where
    ss.idbat = tt.idbat
    and
    tt.idbat = vv.idbat
    Pour l'instant, le résultat qui m'est renvoyé est de la forme que je souhaitai. Le problème est que si un des bâiments n'a pas toute les caractéristiques de la table "Caractéristique", celui ci est complètement chapoté et n'apparaît pas dans cette liste. Ce que j'aimerai, c'est que la ligne entière apparaissent et que pour la caractéristique qui n'est pas référencée, la cellule montre une valeur "null".

    A+
    Sud04

  3. #3
    Membre habitué Avatar de budtucker
    Profil pro
    Développeur multimédia
    Inscrit en
    Avril 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Avril 2007
    Messages : 176
    Points : 197
    Points
    197
    Par défaut
    Super on a finit par trouver :

    Il existe pour Postgre une extension qui s'appelle Crosstab. Elle permet exactement de faire ce que je souhaite faire :

    SELECT * from
    crosstab('SELECT car.idbat, car.idcarac, car.valeur FROM caracbat car ORDER BY 1',
    'SELECT DISTINCT bat.idcarac FROM caracte bat ORDER BY 1')
    as
    ct(idbat text,
    "C01" text,
    "C02" text,
    "C03" text);


    Ainsi, même pour les occurences ayant une valeur vide dans caractéristique, celles ci apparaiassent tout de même avec la valeur "null".

    Enfin, il ne me reste plus qu'à reccupérer la liste des occurences de ma table "caractéristique" et de l'ajouter dans ct(......).

    A bientôt,
    Sud04

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

Discussions similaires

  1. [Toutes versions] Calculer des valeurs qui correspondent à des champs dynamiques
    Par Alaedjens dans le forum Excel
    Réponses: 4
    Dernier message: 10/01/2014, 23h07
  2. Des boutons qui affichent des sous formulaires
    Par nicolas2603 dans le forum IHM
    Réponses: 2
    Dernier message: 27/11/2007, 15h43
  3. Réponses: 2
    Dernier message: 11/12/2006, 15h06
  4. Creer des fonctions qui émule des fonctions Access
    Par steelidol dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 04/05/2006, 18h42
  5. Réponses: 5
    Dernier message: 19/03/2006, 18h29

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