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 学号,名字,科目

 以上写的不对的地方多多指教

以下是高手写的:

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)

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。