Du kan justere rækkefølgen af felterne i en dynamisk pivotforespørgsel ved at tilføje en ORDER BY
når du indstiller din @cols
streng:
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,'')
Opdatering:Gik glip af DISTINCT
først, når du bruger DISTINCT
du skal bruge en underforespørgsel og derefter 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,'')
Du skal muligvis tilføje et "sorteringsfelt" i din underforespørgsel, hvis du ikke blot kan bruge kolonnenavnet, og du kan tilføje alle felter til underforespørgslen, så længe de ikke forstyrrer DISTINCT
liste. For eksempel:
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,'')