Bonjour,
J'aimerai savoir comment utiliser la fonction pivot en sql dans un SELECT afin d'inverser les colonnes et les lignes (cad avoir le résultat sur les lignes à la place des colonnes et vice-versa).
Merci d'avance !
Version imprimable
Bonjour,
J'aimerai savoir comment utiliser la fonction pivot en sql dans un SELECT afin d'inverser les colonnes et les lignes (cad avoir le résultat sur les lignes à la place des colonnes et vice-versa).
Merci d'avance !
Merci Hulk, j'ai déjà vu cela mais c'est un peu compliqué (il fait des sum sur des colonnes) mais ce que je cherche c'est une simple transformation du résultat de la requete SELECT, comme si on va pivoter la table résultat de 90° sans aucune modification des valeurs.
si j'ai bien suivi
A B C <== colonnes
x y z
1 2 3
4 5 6
deviendrait
A B C <== colonnes
4 1 x
5 2 y
6 3 z
mais les colonnes ne bougent pas ?
si c'est ça, tu te trompes d'outil, SQL est pas vraiment approrié, utilise un truc genre Matlab qui te transpose tout ce que tu veux avec 1 opérateur.
Jusqu'à nouvel avis, une telle instruction n'appartient à la norme SQL.
Normalement ça devrait marcher avec la fontion PIVOT (SQL SERVER 2005) , seulement dans mon cas il ne s'agit pas de faire des sommes (comme les exemples que j'ai vus).
exemple
A B C <== colonnes
x y z
1 2 3
4 5 6
devient :
A x 1 4
B y 2 5
C z 3 6
J'ajoute que je ne connais pas le nombre de colonnes d'avance.
La fct pivot appartient à microsoft et est un héritage d'Access.
Cà n'est pas une fct SQL normalisée.
Ceci dit elle peut rendre bien des services.
Ex: générer des rapports avec les mois en colonnes.
Il y a toujours moyen de bricoler avec un max de sous-requetes. Il faudrait commencer par créer une nouvelle table avec un champ contenant les colonnes ABC....
Bon courage
Oui mais je bosse sur MS SQL Server dans je peux utiliser cette fonction !Citation:
Envoyé par jnore
générer des rapports avec les mois en colonnes -> c'est bien ça que je veux faire !
aucune idée ? :(
Le problème sur ce genre de requete, c'est que, je crois, il y a systématiquement un regroupement, ce qui oblige donc à appliquer une somme ou un autre agrégat (count,max,...).
ex: requete analyse croisée (ca par mois sur une liste de fournisseurs)
Code:
1
2
3
4
5
6
7 TRANSFORM Sum(montant) AS somme SELECT fournisseur FROM table GROUP BY fournisseur PIVOT Format([date],"mmm") In ("janv","févr","mars","avr","mai","juin","juil","août","sept","oct","nov","déc");
Effectivemenr jnore, il faut obligatoirement un GROUP BY avec le pivot.
Merci.