7
votes

SQL Dynamic Pivot - Comment commander des colonnes

Je travaille sur une requête de pivot dynamique sur une table contenant:

  • OID - PerdreId
  • Taille - Taille du produit
  • Bucketnum - L'ordre que les tailles devrait aller
  • Quantité - Combien de commandés

    La colonne Taille contient des tailles différentes en fonction de l'OID.

    Ainsi, à l'aide du code trouvé ici , je mets ceci ensemble: < Pré> xxx

    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.

    J'ai essayé la commande facultative après le pivot, mais cela ne fonctionne pas.

    Comment puis-je contrôler l'ordre dans lequel les colonnes apparaissent?

    Merci


0 commentaires

4 Réponses :


11
votes

Vous devez résoudre ce problème: xxx

pour renvoyer les colonnes dans le bon ordre. Vous devrez peut-être faire quelque chose comme ceci au lieu d'utiliser distinct : xxx


1 commentaires

Ahhhhhh! Le bit 'min (bucketnum) était ce dont j'avais besoin !! Merci merci!



0
votes

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:

http://blog.stevienova.com/2009/07/13/USTION-CTES-O-Créate-dynamic-pivot-tables-in-sql-20052008/


1 commentaires

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.



0
votes

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


0 commentaires

3
votes
SELECT @listCol = STUFF(
        (SELECT DISTINCT ',' + QUOTENAME(size) AS [size]
        FROM #t
        ORDER BY [size]
        FOR XML PATH('')

2 commentaires

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.