Sie können die Reihenfolge der Felder in einer dynamischen Pivot-Abfrage anpassen, indem Sie einen ORDER BY
hinzufügen wenn Sie Ihren @cols
setzen Zeichenkette:
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,'')
Update:DISTINCT
verpasst zuerst, wenn DISTINCT
verwendet wird Sie müssen eine Unterabfrage und dann ORDER BY
verwenden :
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,'')
Möglicherweise müssen Sie Ihrer Unterabfrage ein Sortierfeld hinzufügen, wenn Sie nicht einfach den Spaltennamen verwenden können, und Sie können der Unterabfrage beliebige Felder hinzufügen, solange sie DISTINCT
nicht stören aufführen. Zum Beispiel:
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,'')