Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/04/2007, 22h11   #1
Membre actif
 
Avatar de budtucker
 
Développeur multimédia
Inscription : avril 2007
Messages : 175
Détails du profil
Informations professionnelles :
Activité : Développeur multimédia

Informations forums :
Inscription : avril 2007
Messages : 175
Points : 174
Points : 174
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+
budtucker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2007, 09h24   #2
Membre actif
 
Avatar de budtucker
 
Développeur multimédia
Inscription : avril 2007
Messages : 175
Détails du profil
Informations professionnelles :
Activité : Développeur multimédia

Informations forums :
Inscription : avril 2007
Messages : 175
Points : 174
Points : 174
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+
budtucker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2007, 10h35   #3
Membre actif
 
Avatar de budtucker
 
Développeur multimédia
Inscription : avril 2007
Messages : 175
Détails du profil
Informations professionnelles :
Activité : Développeur multimédia

Informations forums :
Inscription : avril 2007
Messages : 175
Points : 174
Points : 174
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,
budtucker est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h56.


 
 
 
 
Partenaires

Hébergement Web