You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 22:48:03