1. 问题:假设有张学生成绩表(tb)如下:  
  2. 姓名 课程 分数  
  3. 张三 语文 74  
  4. 张三 数学 83  
  5. 张三 物理 93  
  6. 李四 语文 74  
  7. 李四 数学 84  
  8. 李四 物理 94  
  9. 想变成(得到如下结果):   
  10. 姓名 语文 数学 物理   
  11. ---- ---- ---- ----  
  12. 李四 74   84   94  
  13. 张三 74   83   93  
  14. -------------------  
  15. */  
  16.  
  17. create table #tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)  
  18. insert into #tb values('张三' , '语文' , 74)  
  19. insert into #tb values('张三' , '数学' , 83)  
  20. insert into #tb values('张三' , '物理' , 93)  
  21. insert into #tb values('李四' , '语文' , 74)  
  22. insert into #tb values('李四' , '数学' , 84)  
  23. insert into #tb values('李四' , '物理' , 94)  
  24. go  
  25.  
  26.  
  27. declare @sql varchar(8000)  
  28. select @sql = isnull(@sql + '],[' , '') + 课程 from #tb group by 课程  
  29.  
  30. PRINT @sql  
  31.  
  32. set @sql = '[' + @sql + ']' 
  33.  
  34.  
  35. exec ('select * from (select * from #tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b')  
  36.  
  37. drop table #tb