Je travaille sur une requête de pivot dynamique sur une table contenant:
La colonne Taille contient des tailles différentes en fonction de l'OID. P>
Ainsi, à l'aide du code trouvé ici , je mets ceci ensemble: p> < Pré> xxx pré>
Cela fonctionne très bien, sauf que les en-têtes de colonne (les étiquettes de tailles) ne sont pas dans la commande basée sur la colonne Bucketnum. Les sont dans la commande basée sur les tailles. P>
J'ai essayé la commande facultative après le pivot, mais cela ne fonctionne pas. P>
Comment puis-je contrôler l'ordre dans lequel les colonnes apparaissent? p>
Merci p> p>
4 Réponses :
Vous devez résoudre ce problème: pour renvoyer les colonnes dans le bon ordre. Vous devrez peut-être faire quelque chose comme ceci au lieu d'utiliser distinct code>: p>
Ahhhhhh! Le bit 'min (bucketnum) était ce dont j'avais besoin !! Merci merci!
J'ai vu ce lien juste aujourd'hui, qui utilise un CTE pour construire la liste des colonnes (qui, vraisemblablement, vous pouvez commander) à la volée sans avoir besoin de SQL dynamique: P>
http://blog.stevienova.com/2009/07/13/USTION-CTES-O-Créate-dynamic-pivot-tables-in-sql-20052008/ P>
Cette solution n'est pas dynamique que dans les noms des colonnes, pas dans le nombre de colonnes, qui aurait toujours besoin d'une technique dynamique au moment de l'opération de pivotement. J'ai utilisé cette technique pour pivoter que la date variable varie cependant où il fait toujours 12 mois, mais commence à différents mois - c'est une transformation de base de base.
J'ai eu le même problème et j'ai essayé la solution suggérée ci-dessus mais, probablement due à mon niveau de compréhension, ne pouvait pas le faire fonctionner. J'ai trouvé un simple hack était de créer une table Temp avec les en-têtes de colonne commandés correctement à l'aide de la commande par des instructions, puis tirez dans cette liste sur la variable qui définit les noms de colonne de requête de pivot dynamique.
E.g. P>
SELECT WeekNum INTO #T3 FROM #T2 GROUP BY WeekNum ORDER BY MIN(WeekNum) SELECT @ColumnName1 = ISNULL(@ColumnName1 + ',','') + QuoteName(WeekNum) FROM (SELECT WeekNum From #T3) AS WeekNum
SELECT @listCol = STUFF( (SELECT DISTINCT ',' + QUOTENAME(size) AS [size] FROM #t ORDER BY [size] FOR XML PATH('')
Bien que cette requête puisse répondre à la question, pouvez-vous fournir un peu plus d'informations sur la façon dont cette réponse fonctionne?
Il fonctionne la même chose que le code dans le message d'origine, mais cela crée un alias de la colonne afin de pouvoir y avoir une commande.