- 问题:假设有张学生成绩表(tb)如下:
- 姓名 课程 分数
- 张三 语文 74
- 张三 数学 83
- 张三 物理 93
- 李四 语文 74
- 李四 数学 84
- 李四 物理 94
- 想变成(得到如下结果):
- 姓名 语文 数学 物理
- ---- ---- ---- ----
- 李四 74 84 94
- 张三 74 83 93
- -------------------
- */
- create table #tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
- insert into #tb values('张三' , '语文' , 74)
- insert into #tb values('张三' , '数学' , 83)
- insert into #tb values('张三' , '物理' , 93)
- insert into #tb values('李四' , '语文' , 74)
- insert into #tb values('李四' , '数学' , 84)
- insert into #tb values('李四' , '物理' , 94)
- go
- declare @sql varchar(8000)
- select @sql = isnull(@sql + '],[' , '') + 课程 from #tb group by 课程
- PRINT @sql
- set @sql = '[' + @sql + ']'
- exec ('select * from (select * from #tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b')
- drop table #tb
转载于:https://blog.51cto.com/shijie/528822