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 !
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.
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous,
N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton
et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.
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 !Envoyé par jnore
générer des rapports avec les mois en colonnes -> c'est bien ça que je veux faire !
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.
Partager