关于交差表的典型问题请指教--online ( 积分: 100 )

  • 主题发起人 主题发起人 xjmmmm
  • 开始时间 开始时间
X

xjmmmm

Unregistered / Unconfirmed
GUEST, unregistred user!
数据表
学号 姓名 课程名称 成绩 学分
001 张三 英语 70 2
002 李四 邓论 40 3
003 王三 数学 70 3
如何将上面的数据表变成
学号 姓名 英语 邓论 数学 学分
001 张三 70 2
002 李四 40 3
003 王三 70 3
我用的是导出excel的形式创建报表,不知道fastreport或其它报表组件可否解决此问题
 
数据表
学号 姓名 课程名称 成绩 学分
001 张三 英语 70 2
002 李四 邓论 40 3
003 王三 数学 70 3
如何将上面的数据表变成
学号 姓名 英语 邓论 数学 学分
001 张三 70 2
002 李四 40 3
003 王三 70 3
我用的是导出excel的形式创建报表,不知道fastreport或其它报表组件可否解决此问题
 
drop table 学生成绩表
--建表
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','李四','数学',59,'补')
insert into 学生成绩表 values('3','张三','语文',55,'')
insert into 学生成绩表 values('2','王三','语文',35,'作')
insert into 学生成绩表 values('3','张三','数学',89,'')
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

declare @subjectcount varchar(10)
select @subjectcount=count(Distinct 课程) from 学生成绩表
select @sql=@sql+'(select sum(成绩) from 学生成绩表 where 学号=b.学号) / '+@subjectcount+' as 平均分 ,'
select @sql=@sql+'(select cast(Count(学号)as varchar(10))+''科'' from 学生成绩表 where 成绩<60 and 学号=b.学号) as 不及格科数'
+' from 学生成绩表 as b group by 学号,姓名'
print @sql
select @sql=@sql+' union select ''合计'' as 学号,'''' as 姓名,'
select @sql=@sql+'(Select cast(Count(学号) as varchar(10))+''人'' from 学生成绩表 where 成绩<60 and 课程='''
+ 课程+''') as '+ 课程 +','from (select Distinct 课程 from 学生成绩表) as a
select @sql=@sql+''''' as 平均分,'''' as 不及格科数 order by 平均分 desc'
--print @sql
exec(@sql)
 
楼上素强人,创建临时表,就这么做的了!
 
直接帮你改了:)
drop table 学生成绩表
GO
--建表
create table 学生成绩表
(学号 varchar(10) not null, 姓名 varchar(10) not null,
课程名称 varchar(20) not null, 成绩 float,学分 float)
--录入数据
insert into 学生成绩表 values('001','李四','语文',70,2)
insert into 学生成绩表 values('002','王三','化学',40,3)
insert into 学生成绩表 values('003','张三','数学',70,3)
insert into 学生成绩表 values('003','张三','化学',70,3)
go
--select * from 学生成绩表
declare @sql varchar(8000)
set @sql='select 学号,姓名,'
select @sql=@sql+'cast(sum(case 课程名称 when '''+课程名称+''' then
成绩 else
0 end) as varchar(10))
as '
+课程名称+' ,' from (select Distinct 课程名称 from 学生成绩表) a
select @sql=left(@sql,len(@sql)-1)+',+(select sum(学分) from 学生成绩表 where 学号=b.学号 ) as 学分 from 学生成绩表 as b group by 学号,姓名'
print @sql
exec(@sql)
 
后退
顶部