Anda dapat menyesuaikan urutan bidang dalam kueri pivot dinamis dengan menambahkan ORDER BY
saat Anda menyetel @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,'')
Pembaruan:Melewatkan DISTINCT
pada awalnya, saat menggunakan DISTINCT
anda harus menggunakan subquery dan kemudian 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,'')
Anda mungkin perlu menambahkan bidang 'urutkan' ke dalam subkueri jika Anda tidak dapat hanya menggunakan nama kolom, dan Anda dapat menambahkan bidang apa pun ke subkueri selama tidak mengganggu DISTINCT
daftar. Misalnya:
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,'')