參考:http://wenku.baidu.com/view/827ee5eff8c75fbfc77db261.html
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
--SQL SERVER 2000 靜态SQL,指課程隻有國文、數學、實體這三門課程。(以下同)
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 姓名
--SQL SERVER 2000 動态SQL,指課程不止國文、數學、實體這三門課程。(以下同)
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 課程 when ''' + 課程 + ''' then 分數 else 0 end) [' + 課程 + ']'
from (select distinct 課程 from tb) as a
set @sql = @sql + ' from tb group by 姓名'
exec(@sql)
--SQL SERVER 2005 靜态SQL。
select * from (select * from tb) a pivot (max(分數) for 課程 in (國文,數學,實體)) b
--SQL SERVER 2005 動态SQL。
declare @sql varchar(8000)
select @sql = isnull(@sql + '],[' , '') + 課程 from tb group by 課程
set @sql = '[' + @sql + ']'
exec ('select * from (select * from tb) a pivot (max(分數) for 課程 in (' + @sql + ')) b')
---------------------------------
如果執行 後報錯 “資料庫的相容級别出錯,總報錯"'PIVOT' 附近有文法錯誤”
那麼執行一下存儲過程 dbName :為你的資料庫名稱 ;90 :為相容級别
EXEC sp_dbcmptlevel dbName,90
其中dbName就是你要修改相容性的資料庫名,運作完畢後,重新運作上面的sql語句,執行成功
參考:http://wenku.baidu.com/view/827ee5eff8c75fbfc77db261.html