Vous pouvez ajuster l'ordre des champs dans une requête pivot dynamique en ajoutant un ORDER BY
lorsque vous définissez votre @cols
chaîne :
select @cols = STUFF((SELECT distinct ',' + QUOTENAME('Month'+cast(DATEPART(m, [Inv Date]) as varchar(2)))
from #TempTable
ORDER BY ....
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'')
Mise à jour :Vous avez manqué le DISTINCT
au début, lors de l'utilisation de DISTINCT
vous devrez utiliser une sous-requête puis ORDER BY
:
SELECT @cols = STUFF((SELECT ',' + QUOTENAME(ColName)
FROM (SELECT DISTINCT 'Month'+cast(DATEPART(m, [Inv Date]) as varchar(2)) ColName
FROM #TempTable
)sub
ORDER BY ColName
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'')
Vous devrez peut-être ajouter un champ de "tri" dans votre sous-requête si vous ne pouvez pas simplement utiliser le nom de la colonne, et vous pouvez ajouter n'importe quel champ à la sous-requête tant qu'il ne perturbe pas le DISTINCT
liste. Par exemple :
SELECT @cols = STUFF((SELECT ',' + QUOTENAME(ColName)
FROM (SELECT DISTINCT 'Month'+cast(DATEPART(m, [Inv Date]) as varchar(2)) ColName
,CASE WHEN field = 'something' THEN 1
WHEN field = 'something else' THEN 2
ELSE 3
END as Sort
,Cust_ID
FROM #TempTable
)sub
ORDER BY Sort,Cust_ID
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'')