SQL Server Pivot plusieurs colonnes basées sur une colonne
J'ai la suite de la source et de la destination des tables dans sql server 2008R2. Comment puis-je faire de pivot(s) en TSQL pour se rendre à la destination de la source.
SourceTbl
empId empIndex empState empStDate empEndDate
========================================================
10 1 AL 1/1/2012 12/1/2012
10 2 FL 2/1/2012 2/1/2013
15 1 FL 3/20/2012 1/1/2099
DestTbl
empId empState1 empState1StDate empState1EndDt empState2 empState2StDate empState2EndDt
=========================================================================================================
10 AL 1/1/2012 12/1/2012 FL 2/1/2012 2/1/2013
15 FL 3/20/2012 1/1/2099 NULL NULL NULL
En espérant que le empIndex sera en quelque sorte aider dans le pivot.
pivot est également connu comme le transformer en msaccess. votre question est unique en ce qu'il a également le texte (pas entiers) dans les cellules qui en résultent. la fonction d'agrégation a encore à s'appliquer, dans ce cas, MIN() devrait faire amende sur les valeurs de Texte, même lorsqu'il est à seulement 1 valeur de texte.
OriginalL'auteur BJ Rocking | 2013-08-02
Vous devez vous connecter pour publier un commentaire.
Depuis que vous êtes à l'aide de SQL Server il y a plusieurs façons différentes que vous pouvez convertir les lignes en colonnes. Vous pouvez utiliser une fonction d'agrégation avec une expression case:
Voir SQL jouer avec la Démo.
Si vous souhaitez utiliser la fonction de PIVOT pour obtenir le résultat, alors je vous recommande d'abord unpivoting les colonnes
empState
,empStDate
etempEndDate
si vous avez plusieurs lignes. Vous pouvez utiliser le UNPIVOT de la fonction ou de la CROIX s'APPLIQUENT à convertir les données, le code sera:Voir Démo. Une fois les données unpivoted, alors vous pouvez appliquer la fonction de PIVOT de sorte que le code final sera:
Voir SQL jouer avec la Démo.
Th versions ci-dessus sera excellent travail si vous avez un nombre limité de
empindex
, mais si pas, alors vous pouvez utiliser le SQL dynamique:Voir SQL Jouer avec la Démo
Vous pouvez utiliser ces requêtes afin de les INSÉRER DANS votre
DestTbl
, ou au lieu de stocker les données dans ce format, vous avez maintenant une requête pour obtenir le résultat souhaité.Ces requêtes place les données dans le format:
J'ai vu POUR XML utilisé beaucoup avant.. mais bravo et thumbsup pour une meilleure utilisation de l': des TRUCS QUOTENAME et NVARCHAR(MAX) dans un PIVOT 🙂 MSACCESS appelle cette TRANSFORMATION (pas sûr de savoir pourquoi la commande n'est jamais arrivé à SQL server)
OriginalL'auteur Taryn
Wow c'était plus compliqué que ce que j'imaginais, mais j'ai fait le faire fonctionner à merveille! merci. C'était ma version finale. Le TextKey contient les données que vous souhaitez transformer en colonnes, et la TextValue est la valeur qui se termine à l'intérieur de chaque cellule.
OriginalL'auteur hamish