declare @sql varchar(8000) set @sql='select 学号,姓名,' select @sql=@sql+'cast(sum(case 科目 when ''+科目+'' then 成绩 else 0 end) as varchar(10)) +IsNull((select 标识 from test where 学号=b.学号 and 科目=''+科目+''),'') as ' +科目+' ,' from (select Distinct 科目 from test) as a select @sql=left(@sql,len(@sql)-1)+' from test as b group by 学号,姓名' exec(@sql)
----------------------------------------------
充电..........
/*create table 学生成绩表 (学号 varchar(10) not null, 姓名 varchar(10) not null, 课程 varchar(20) not null, 成绩 float,标识 varchar(10))*/ /* insert into 学生成绩表 values('1','李四','语文',85,') insert into 学生成绩表 values('2','王三','数学',0,'缺') insert into 学生成绩表 values('1','李四','数学',60,'补') insert into 学生成绩表 values('3','张三','语文',55,') insert into 学生成绩表 values('2','王三','语文',35,'作') insert into 学生成绩表 values('3','张三','数学',89,') */ --select * from 学生成绩表 declare @sql varchar(8000) set @sql='select 学号,姓名,' select @sql=@sql+'cast(sum(case 课程 when ''+课程+'' then 成绩 else 0 end) as varchar(10)) +IsNull((select 标识 from 学生成绩表 where 学号=b.学号 and 课程=''+课程+''),'') as ' +课程+' ,' from (select Distinct 课程 from 学生成绩表) as a select @sql=left(@sql,len(@sql)-1)+' from 学生成绩表 as b group by 学号,姓名' exec(@sql)
1.把sum改成Max 2.将0 改成 '0' 3.把+IsNull((select 标识 from 学生成绩表 where 学号=b.学号 and 课程=''+课程+''),'') 去掉.
declare @sql varchar(8000) set @sql='select 学号,姓名,' select @sql=@sql+'cast(Max(case 课程 when ''+课程+'' then 成绩 else '0' end) as varchar(10)) as '+课程+' ,' from (select Distinct 课程 from 学生成绩表) as a select @sql=left(@sql,len(@sql)-1)+' from 学生成绩表 as b group by 学号,姓名' exec(@sql)
----------------------------------------------
充电..........