网上收藏的列转行


if exists (select * from INFORMATION_SCHEMA.TABLES  where TABLE_NAME ='tb')
drop table tb
go
create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int,班级 varchar(10))
insert into tb values('张三' , '语文' , 74,'1班')
insert into tb values('张三' , '数学' , 83,'1班')
insert into tb values('张三' , '物理' , 93,'2班')
insert into tb values('李四' , '语文' , 74,'2班')
insert into tb values('李四' , '数学' , 84,'1班')
insert into tb values('李四' , '物理' , 94,'1班')
insert into tb values('李四' , '物理' , 100,'1班')
go
select * from tb

go--sql2005
declare @sql varchar(8000)
select @sql = isnull(@sql + ',' , '') + 课程 from tb group by 课程
exec ('select * from (select * from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b')
go
--sql2000
select 姓名 as 姓名 ,班级,
  max(case 课程 when '语文' then 分数 else 0 end) 语文,
  max(case 课程 when '数学' then 分数 else 0 end) 数学,
  max(case 课程 when '物理' then 分数 else 0 end) 物理
from tb
group by 姓名,班级

原文地址:https://www.cnblogs.com/ruonanxiao/p/1792495.html