SQL Server unpivot plusieurs colonnes
Je suis en train de faire pivoter une table autour d'un nombre de colonnes pour arriver à 3 colonnes (pivot, le nom de colonne, valeur)
ainsi, par exemple:
name | age | gender
------+-------+---------
John | 20 | M
Jill | 21 | F
devient:
name | column | value
-----+--------+-------
John | age | 20
John | gender | M
Jill | age | 21
Jill | gender | F
J'ai googlé un peu, mais n'ai pas trouvé une situation similaire, surtout depuis que le pivot semble être fait dans la direction opposée de ce que je suis en train d'accomplir.
OriginalL'auteur mathematician | 2014-07-18
Vous devez vous connecter pour publier un commentaire.
La conversion des colonnes en lignes est appelé un
UNPIVOT
. Vous n'avez pas spécifié de quelle version de SQL Server que vous utilisez, mais il existe plusieurs façons différentes pour obtenir le résultat.Vous pouvez utiliser
SELECT
avecUNION ALL
:Si vous utilisez SQL Server 2005+, vous pouvez utiliser le UNPIVOT fonction:
Enfin, au lieu de la UNPIVOT fonction vous pouvez également utiliser
CROSS APPLY
soit avecVALUES
(2008+) ouUNION ALL
:L'une de ces versions vous donnera le résultat que vous souhaitez. Vous remarquerez que j'ai dû jeter la
age
colonne à unevarchar
. C'est parce que le type de données/longueur (en unpivot) des colonnes doivent être les mêmes puisque vous serez en les transformant en une seule colonne dans le résultat final.donc, ce que vous dites, c'est, dans ma recherche pour savoir comment utiliser pivot, car je n'ai trouvé que le contraire applications, je devrais avoir regardé UNpivot... génial!! : ) merci!
C'est seulement UNPIVOT qui exige que le type de données pour être de la même longueur - voir sur DBA.SE
OriginalL'auteur Taryn