with a as ( select 日期,學號,名字, '語文' as 科目,語文 as 分數 from tsco union all select 日期,學號,名字, '數學' as 科目,數學 as 分數 from tsco union all select 日期,學號,名字, '英語' as 科目,英語 as 分數 from tsco ) select 學號,名字,科目, max(case when 日期='2014/10/1' then 分數 end) as '2014/10/1' , max(case when 日期='2014/11/1' then 分數 end) as '2014/11/1' , max(case when 日期='2014/12/1' then 分數 end) as '2014/12/1' from a group by 學號,名字,科目
以上寫的不對的地方多多指教sql
如下是高手寫的:spa
if OBJECT_ID('數據') is not null drop table 數據 create table 數據(日期 varchar(10), 學號 varchar(5), 名字 varchar(4), 語文 numeric(3,0), 數學 numeric(3,0), 英語 numeric(3,0)) insert into 數據 select '2014/10/1',1,'甲',98,80,60 insert into 數據 select '2014/10/1',2,'甲',100,40,70 insert into 數據 select '2014/10/1',3,'丙',50,20,100 insert into 數據 select '2014/11/1',1,'甲',90,80,60 go declare @i varchar(8000),@j as varchar(8000) set @i='' set @j='' select @i=@i+',['+日期+']' from 數據 group by 日期 select @j='select * from (select 日期,學號,名字,語文 as 成績,''語文'' as 科目 from 數據 union all select 日期,學號,名字, 數學 as 成績,''數學'' as 科目 from 數據 union all select 日期,學號,名字, 英語 as 成績,''英文'' as 科目 from 數據) as bb pivot (sum(成績) for 日期 in ('+stuff(@i,1,1,'')+')) as bb' exec(@j)