您可以通过添加一个来调整动态数据透视查询中字段的顺序ORDER BY
当你设置你的@cols
string:
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,'')
更新:错过了DISTINCT
起初,当使用DISTINCT
你必须使用子查询,然后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,'')
如果您不能简单地使用列名,则可能需要在子查询中添加“排序”字段,并且您可以向子查询添加任何字段,只要它们不会破坏子查询DISTINCT
列表。例如:
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,'')