[SQL] Transformer une ligne en colonne ?

Fermé
Henry - 23 oct. 2005 à 15:05
 andre - 25 juin 2008 à 21:09
Bonjour à tous ,

Voila j'ai un petit probleme, je travaille depuis plusieurs mois sur SQL et je rencontre un probleme ou la je coince.

Présentation :
J'effectue une requete avec l'envoir d'une variable GET[truc] dans une base de donnée qui me renvoie alors une ligne contenant des identifiants (13 au total) correspondant a la valeur de la variable GET[truc].
Maintenant je veux mettre en relation chaque identifiant récupére avec leurs descriptions dans une autre table.

Problème :
La réponse de SQL est un enregistrement avec 1 ligne dont chaque champ contient une donnée (13 au total). Je souhaiterai 1 champ avec 13 lignes. Une sorte d'invertion de ligne en colonne. Mais la UNION ne marche pas il veut des égalités de colonne et de lignes.

Merci d'avance pour votre aide.

8 réponses

wiwimagique Messages postés 481 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 20 avril 2006 108
27 oct. 2005 à 14:04
tu as plusieurs solutions.

tu fais une grosse jointure sur chacune des 13 éléments de ton tableau.
select champs1,d1.descr as desc1, champs2, d2.descr as desc2 (...) from matable, madescrtable as d1, madescrtable as d2 (...) where champs1=d1.champs and champs2=d2.champs (...)

ça fait bourrin et je sais pas si ça va pas planter l'appli mais ça marche en théorie.

Sinon, l'union marche aussi

au lieu de faire
select * from matable where $condition


tu fais :
select champs1 as champs, description from matable, madescrtable where matable.champs1=madescrtable.champs $condition
union
select champs2 as champs, description from matable, madescrtable where matable.champs2=madescrtable.champs $condition
union
select champs3 as champs, description from matable, madescrtable where matable.champs3=madescrtable.champs $condition
(...)

Tu obtiens ainsi tes 13 champs en colonne.


Enfin, tu peux passer par plusieurs étapes aussi :

récupérer la ligne avec les 13 champs comme tu fais.
Puis mettre les 13 champs dans une chaine "(champs1, champs2,champs3,...)"

puis faire la requete sur les descriptions avec :
select * from madescrtable where champs in $malistedechamps



Mais au final, je dirais que t'as mal pensé tes tables dès le départ :-p


4