2010-09-16 5 views
0

J'ai une table qui ressemble à ceci:Comment puis-je utiliser les valeurs colonnes comme noms de colonnes dans MySQL

|date  |category_id|val 
|2010-08-09|1   |2 
|2010-08-09|2   |45 
|2010-08-10|3   |1500 
|2010-08-10|2   |4 

Je voudrais sélectionner ce tableau, que chaque identifiant de catégorie est une colonne de sorte que le résultat final ressemble à ceci:

|date  |1 |2 |3 
|2010-08-09|2 |45 |NULL 
|2010-08-10|NULL |4 |1500 

Est-ce quelque chose comme ceci possible avec une seule instruction SELECT ou une procédure stockée, sans utiliser une table supplémentaire et sans connaître toutes les valeurs de category_id au préalable?

+1

double possible de [requête mysql pour convertir dynamiquement les données de ligne de colonnes] (http://stackoverflow.com/questions/1599788/mysql-query-to-dynamically-convert-row-data-to-columns) –

+0

OUI, mais il faudrait un script pour construire votre instruction SQL-Select, mais MySQL n'est pas disponible pour construire une telle simulation d'un jeu de résultats de tableau croisé – DRapp

+1

Ce que vous décrivez est connu sous le nom de transposition, de tabulation croisée ou de pivotement. Je ne sais pas si vous pouvez le faire avec un seul SELECT, du moins pas dans MySQL sans une autre langue qui travaille pour vous. Consultez cet article pour quelques idées: http://onlamp.com/pub/a/onlamp/2003/12/04/crosstabs.html – sasfrog

Répondre

1

Je pense que vous voulez utiliser mySQL de sign pour le faire. Voici un bon lien qui fait quelque chose de très semblable à ce que vous tryign à faire:

http://en.wikibooks.org/wiki/MySQL/Pivot_table

+0

Alors que j'ai encore besoin de savoir quelles valeurs j'ai dans la colonne category_id, cette solution est assez facile pour générer le SQL SELECT avec un petit script. – chiborg

Questions connexes