这种查询如何写?好像涉及分组和行列转换

zbguolei 2021-01-23 06:30:39
原始数据:


想要得到的效果:
...全文
121 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
RINK_1 2021-01-25
  • 打赏
  • 举报
回复
引用 4 楼 zbguolei 的回复:
可以这样写动态语句吗?
declare @sql varchar(max)
set @sql=''  --初始化变量@sql
select @sql=@sql+','+grade from #T group by GRADE      --变量多值赋值
set @sql=stuff(@sql,1,1,'')                     --去掉首个‘,‘
set @sql='SELECT * FROM #T PIVOT (COUNT(NAME) FOR GRADE IN ('+@sql+'))B'
exec(@sql)
可以这样写。
zbguolei 2021-01-24
  • 打赏
  • 举报
回复
能说的具体一点吗?
zbguolei 2021-01-24
  • 打赏
  • 举报
回复
可以这样写动态语句吗?
declare @sql varchar(max)
set @sql=''  --初始化变量@sql
select @sql=@sql+','+grade from #T group by GRADE      --变量多值赋值
set @sql=stuff(@sql,1,1,'')                     --去掉首个‘,‘
set @sql='SELECT * FROM #T PIVOT (COUNT(NAME) FOR GRADE IN ('+@sql+'))B'
exec(@sql)
RINK_1 2021-01-24
  • 打赏
  • 举报
回复
引用 2 楼 zbguolei 的回复:
能说的具体一点吗?

CREATE TABLE #T
(CLASS VARCHAR(10),
 NAME VARCHAR(20),
 GRADE VARCHAR(10))
 

INSERT INTO #T
SELECT '1','TOM','A' UNION ALL 
SELECT '1','JACK','A' UNION ALL 
SELECT '1','JERRY','B' UNION ALL 
SELECT '1','JANE','A' UNION ALL 
SELECT '2','ROSE','C' UNION ALL 
SELECT '2','FRANK','C' UNION ALL 
SELECT '3','JERRY','Q' UNION ALL 
SELECT '3','ZOE','C' UNION ALL 
SELECT '3','HENRY','A' 


SELECT *
FROM #T
PIVOT (COUNT(NAME) FOR GRADE IN ([A],[B],[C],[Q])) B
RINK_1 2021-01-23
  • 打赏
  • 举报
回复
SUM+PIVOT

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧