Можете да коригирате реда на полетата в динамична обобщена заявка, като добавите ORDER BY
когато зададете вашите @cols
низ:
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,'')