SQLServer2008 行轉列3

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)
相關文章
相關標籤/搜索