Rechercher : dans
Par :

[SQL] Transformer une ligne en colonne ?

Dernière réponse le 25 jun 2008 à 21:09:55 Henry, le 23 oct 2005 à 15:05:29 
 Signaler ce message aux modérateurs

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.

Meilleures réponses pour « [SQL] Transformer une ligne en colonne ? » dans :
EXCEL : La fonction INTERSECTION VoirVous avez un tableau constitué de lignes et de colonnes. Vous voulez connaitre la valeur de la cellule située à une intersection Ligne / Colonne de votre tableau.... Exemple : Votre tableau : - commence en C3, jusqu'en F3 ... pour les...
Transformer des colonnes en lignes dans un fichier VoirDifférents outils de Linux sont très doués pour travailler avec des lignes, mais pas avec des colonnes (c'est leur rôle) Sed, Awk, Grep, etc. Cependant, il peut arriver pour X raisons que vous ayez un fichier où les données sont à lire en...
Les fonctions Ligne, Lignes, Colonne, Colonnes VoirVous avez un tableau et vous l'avez nommé NomTableau (par exemple) avec : INSERTION / NOM / DEFINIR ..... cocher les cases du tableau et nommer le tableau NomTableau (par exemple) Dans ce tableau, vous voulez connaitre, quelque soit son...
SQL - Modification de table VoirModification de table Il est possible de supprimer une table grâce à la clause DROP, il existe aussi des commandes moins extrêmes permettant L'ajout de colonnes La modification de colonnes La suppression de colonnes Enfin, il est possible...
SQL - Mise à jour d'informations VoirLe SQL permet la modification d'une table par un utilisateur (pour peu qu'il ait les droits suffisants...). La modification d'une table consiste à: ajouter des tuples modifier des tuples existants ou bien supprimer des tuples Insertion de...
Tableaux HTML VoirUtilisation de tableaux Il est souvent utile de présenter des informations mieux structurées qu'avec des listes. Les tableaux permettent de les afficher en lignes et en colonnes. Les tableaux sont définis comme étant des suites de lignes. Un...

1

Ricci, le 27 oct 2005 à 13:05:47

Salut!

Pourrais-tu donner un peu plus de détails, parce que là c pas très clair pour moi.

++
Ricci

Répondre à Ricci

2

wiwimagique, le 27 oct 2005 à 14:04:28

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


Dans sa voiture rouge et jaune

Répondre à wiwimagique

3

henry, le 27 oct 2005 à 14:54:02

Boujour tout le monde !
Merci merci et encore merci pour votre aide.

Je vais essayer cela tout de suite par contre on me dit que j'ai mal pense mes tables. Aprés plusieur essaie je ne vois pas comment faire autrement.
j'ai un table avec des produits dont les champs sont :
IDproduit
Nom
Prenom
etc
Puis une deuxieme table qui contient l'ensemble des identifiant unique des élément qui constitue un produit. Les champs sont :
IDproduit
IDelement1
IDelement2
Etc
Puis pour finir un table qui contient les description complete de chaque element. Les champs sont:
IDelement
Nom
Prenom
Etc

voila ! en tout cas merci encore pour votre aide. Si quelqu"un souhaite en savoir plus nésité pas .

Répondre à henry

4

wiwimagique, le 27 oct 2005 à 15:35:26
  • +2

Hmmm, si chaque produit a des elements distincts par rapport à d'autre produit, tu peux écrire la description de l'élément directement dans la table produit.

Sinon, plus probable, si un produit a un ensemble d'éléments, chaque élément peuvant être présent dans différent produit, il aurait alors fallu passer par une table intermédiaire.

table produit avec
- produitID
- nom du produit
- autre champs spécifique au produit

table élément
- elementID
- description de l'élément
- nom
- etc....

et une table produit_element
- produitID
- elementID



Dans sa voiture rouge et jaune

Répondre à wiwimagique

5

henry, le 27 oct 2005 à 17:46:40

Et bien !
j'ai un peu de mal avec l'union la. Par ta remarque sur la construction des tables en fait j'ai le shéma que tu dis non ?
3 tables avec les champs
IDProduit, IDElement et dans la troisieme (IDproduit, IDelement].
sino j'ai beaucoup de mal avec Union.
Si nous prenons comme exemple :

Table produits
IDproduit =10
Non= truc
etc

Table descriptif_produit
IDproduit=10
IDmachin1=5
IDmachin2=51
etc
et
Table descriptif_machin
IDmachin1
Non
Prenom
etc
pour suivre tes conseils et je t'en remercie mille fois je fais :

SELECT IDmachin1 AS IDdesmachin, nouvelletable  FROM descriptif_produit WHERE descriptif_produit.IDmachin1= nouvelletable.IDdesmachin AND descriptif_produit.IDproduit= '$variable'
ou bien sur $variable me sert a recuperer mon produit.

merci pour ton aide !

Répondre à henry

6

wiwimagique, le 27 oct 2005 à 17:52:05
  • +1

Non, en fait,

Table descriptif_produit
IDproduit=10
IDmachin1=5
IDmachin1=7

devrait ête
Table descriptif_produit
IDproduit=10
IDmachin=5

Avec seulement 2 champs.

pour avoir machin 1, 2, 3 , etc.. tu auras donc 2, 3 , .. 13 lignes !
et non une ligne avec 13 colonnes.


Il ne faut jamais faire par colonne, parce que si jamais ce nombre augmente ou diminue, ben t'es bien emm..dé. Sans compter tous les problèmes d'exploitation des résultats que tu peux avoir comme ton cas ici ;)


Dans sa voiture rouge et jaune

Répondre à wiwimagique

7

henry, le 27 oct 2005 à 17:59:17

Encore moi !

OK J'ai compris ouf !!!!!

merci mille fois en tout cas

Répondre à henry

8

 andre, le 25 jun 2008 à 21:09:55

Se mè pas du vole

Répondre à andre