SQL Server PIVOT行转列后如何将小计subtotal列移至最右侧
问题原因
你当前用SELECT *返回PIVOT结果时,SQL Server会优先输出源查询中不需要参与PIVOT聚合的剩余列(也就是report_month、subtotal),再输出PIVOT生成的分类列,所以才会出现subtotal排在分类列前面的情况。
解决方案
不要用SELECT *,手动指定查询列的顺序:先写固定列report_month,再接动态生成的分类列@cols,最后写subtotal即可。
修改后的完整代码
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) SELECT @cols = STUFF((SELECT DISTINCT ','+ QUOTENAME(category) AS [category] FROM #temp_table2 ORDER BY [category] DESC FOR XML Path(''), TYPE).value('.','NVARCHAR(MAX)'),1,1,'') SET @query = 'SELECT report_month, ' + @cols + ', subtotal -- 手动指定列顺序 FROM( SELECT a.category, a.report_month, a.amount, SUM(a.amount) OVER( PARTITION BY a.report_month) AS subtotal FROM #temp_table2 a) Src PIVOT( SUM(amount) FOR category IN(' + @cols + ') ) Piv ORDER BY report_month' EXECUTE(@query)
内容的提问来源于stack exchange,提问作者Lance Hsu
相关产品推荐
相关产品推荐

