- 問題:假設有張學生成績表(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