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

如何编写T-SQL实现SQL Server按Category多列分组透视取数

T-SQL 透视实现方案

方案1:静态透视(适用于Category取值固定且数量少的场景)

假设你的原表(或现有查询结果的CTE)包含字段:Date、Store、Category、Sales(可替换为你实际的度量字段名),示例代码如下:

SELECT 
  Date,
  Store,
  ISNULL([Electronics], 0) AS Electronics_Sales,
  ISNULL([Clothing], 0) AS Clothing_Sales,
  ISNULL([Food], 0) AS Food_Sales
  -- 这里按你实际的Category取值依次添加列
FROM 
(
  -- 这里替换为你现有产生未透视结果的查询语句
  SELECT Date, Store, Category, Sales FROM YourOriginalTable
) AS SourceData
PIVOT
(
  SUM(Sales) -- 这里替换为你实际需要的聚合函数,如COUNT、MAX等
  FOR Category IN ([Electronics], [Clothing], [Food]) -- 这里列出所有需要转为列的Category取值
) AS PivotTable
ORDER BY Date, Store;

方案2:动态透视(适用于Category取值不固定、需要自动适配新增类别的场景)

无需手动修改列名,代码会自动读取所有Category取值生成透视列:

DECLARE @Columns NVARCHAR(MAX), @SQL NVARCHAR(MAX)

-- 生成所有Category的列名列表,自动处理空值替换为0
SELECT @Columns = STRING_AGG(QUOTENAME(Category) + ' = ISNULL(' + QUOTENAME(Category) + ', 0)', ', ')
FROM (SELECT DISTINCT Category FROM YourOriginalTable) AS CatList

-- 拼接完整的透视查询语句
SET @SQL = N'
SELECT Date, Store, ' + @Columns + N'
FROM 
(
  SELECT Date, Store, Category, Sales FROM YourOriginalTable
) AS SourceData
PIVOT
(
  SUM(Sales)
  FOR Category IN (' + (SELECT STRING_AGG(QUOTENAME(Category), ', ') FROM (SELECT DISTINCT Category FROM YourOriginalTable) AS CatList) + N')
) AS PivotTable
ORDER BY Date, Store;
'

-- 执行动态查询
EXEC sp_executesql @SQL

注意事项

  • 请将代码中的YourOriginalTable替换为你实际的表名,或者你现有生成未透视结果的子查询
  • 度量字段Sales和聚合函数SUM可根据你的实际业务需求替换为对应字段和聚合逻辑
  • 如果你的分组字段不止Date和Store,可在最外层SELECT和子查询中对应添加即可

内容的提问来源于stack exchange,提问作者Marco Fogale

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:06:03