Você pode ajustar a ordem dos campos em uma consulta dinâmica dinâmica adicionando um
ORDER BY
quando você define seu @cols
corda: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,'')
Atualização:faltou o
DISTINCT
a princípio, ao usar DISTINCT
você terá que usar uma subconsulta e então 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,'')
Você pode precisar adicionar um campo 'classificar' em sua subconsulta se não puder simplesmente usar o nome da coluna e pode adicionar quaisquer campos à subconsulta, desde que eles não interrompam o
DISTINCT
Lista. Por exemplo: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,'')