DECLARE @SQL VARCHAR(8000) SET @SQL='SELECT 学号,名字,[科目]' SELECT @SQL=@SQL+',MAX(CASE WHEN 日期='''+CONVERT(VARCHAR(10),日期,120)+'''THEN [成绩] END)['+CONVERT(VARCHAR(10),日期,120)+']' FROM TB GROUP BY 日期 ORDER BY 日期 SET @SQL=@SQL+'FROM(SELECT 日期,学号,名字,''语文''[科目],1 OD,语文[成绩]FROM TB UNION ALL SELECT 日期,学号,名字,''数学'',2,数学 FROM TB UNION ALL SELECT 日期,学号,名字,''英语'',3,英语 FROM TB)T GROUP BY 学号,名字,[科目],OD ORDER BY 学号,OD' EXEC(@SQL)建议动态执行
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)
SET @SQL='SELECT 学号,名字,[科目]'
SELECT @SQL=@SQL+',MAX(CASE WHEN 日期='''+CONVERT(VARCHAR(10),日期,120)+'''THEN [成绩] END)['+CONVERT(VARCHAR(10),日期,120)+']'
FROM TB
GROUP BY 日期
ORDER BY 日期
SET @SQL=@SQL+'FROM(SELECT 日期,学号,名字,''语文''[科目],1 OD,语文[成绩]FROM TB
UNION ALL SELECT 日期,学号,名字,''数学'',2,数学 FROM TB
UNION ALL SELECT 日期,学号,名字,''英语'',3,英语 FROM TB)T
GROUP BY 学号,名字,[科目],OD
ORDER BY 学号,OD'
EXEC(@SQL)建议动态执行
学号 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)