Bạn có thể điều chỉnh thứ tự của các trường trong truy vấn tổng hợp động bằng cách thêm ORDER BY
khi bạn đặt @cols
chuỗi:
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,'')
Cập nhật:Bỏ lỡ DISTINCT
lúc đầu, khi sử dụng DISTINCT
bạn sẽ phải sử dụng một truy vấn con và sau đó 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,'')
Bạn có thể cần thêm trường 'sắp xếp' vào truy vấn con của mình nếu bạn không thể chỉ sử dụng tên cột và bạn có thể thêm bất kỳ trường nào vào truy vấn con miễn là chúng không làm gián đoạn DISTINCT
danh sách. Ví dụ:
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,'')