Tableau croisé dynamic avec un nombre de colonnes connu

J'ai une table qui ressemble à ceci

OutputTablesID Label ColumnOrder 236 text 1 236 text 2 236 text 3 . . . . . . . . . 236 text 25 

J'ai besoin de la table pour ressembler à ça

 OutputTablesID 1>>2>>3>>4>>5>>6>>7>>8>>9>>10>>11>>12>>13>>14>>15 236>>>>>>>>>Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text 

J'ai essayé le code que j'ai utilisé à partir d'un tableau croisé dynamic existant, mais je ne peux pas utiliser Label dans la fonction d'agrégat car il s'agit d'une string de text.

C'est ma tentative au tableau croisé dynamic

  Create FUNCTION [dbo].[ColOrder] ( ) RETURNS TABLE AS RETURN ( SELECT OutputTablesId, Label, 1,2,3,4,5,6,7,8,9,10,11,12 from ( SELECT OCL.Label, OCL.OutputTablesId FROM OCL ) AS D PIVOT ( sum(Label) FOR ColumnOrder IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12]) ) AS P 

Merci pour vos commentaires et suggestions!

Votre code est très proche mais vous essayez d'utiliser sum() sur un varchar qui ne fonctionnera pas. Si vous modifiez la fonction d'agrégat à max() cela devrait fonctionner:

 select OutputTablesID, [1], [2], [3], [25] from ( select OutputTablesID, Label, ColumnOrder from yourtable ) src pivot ( max(label) for ColumnOrder in ([1], [2], [3], [25]) -- put other ColumnOrder values here ) piv 

Voir SQL Fiddle avec démo

Si vous voulez créer ceci en tant que fonction, vous pouvez utiliser:

 create function dbo.colorder() returns table as return select OutputTablesID, [1], [2], [3], [25] from ( select OutputTablesID, Label, ColumnOrder from yourtable ) src pivot ( max(label) for ColumnOrder in ([1], [2], [3], [25]) -- put other ColumnOrder values here ) piv 

Voir SQL Fiddle avec démo

Le résultat est:

 | OUTPUTTABLESID | 1 | 2 | 3 | 25 | ---------------------------------------------- | 236 | text | text | text | text |