sql行列轉置

 

  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 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章