我现用的是delphi6.0QREPORT做一个报表要求格式如下
        语文     数学    英语   化学    
张三     80      76      90      85
李四     54      56      90      45
....
这样一个报表格式
我数据库表为两个表一个为学习课目,包括一个字段课目名称及上面的表头语文、数学、英语、化学
另一个表为学生成绩表包括字段为学生名字、学习课目名称、课目成线这几个字段,请问怎么成为这样的一个报表,请大家帮忙解决一下,是不是要改表结构,还请指教一下,我现在数据库是一下竖列表数据我现在要的是一个横的表数据,请多提 宝贵意见,多谢!!!

解决方案 »

  1.   

    直接用存储过程实现,下面是我的sql脚本
    --测试表及数据
    create table grade(id int identity(1,1) primary key, name varchar(10) , subject varchar(50) ,grade decimal)
    create table subject(subject varchar(50) primary key)insert into subject values('math')
    insert into subject values('Eng.')
    insert into subject values('Chi.')
    insert into subject values('chem.')insert into grade values('yuan', 'math', 100)
    insert into grade values('yuan', 'Eng.', 70)
    insert into grade values('yuan', 'Chi.', 80)
    insert into grade values('yuan', 'chem.', 90)--存储过程脚本内容
    declare @Sql nvarchar(4000)set @Sql = 'select name 'select @Sql = @Sql + ', sum(case subject when ''' + subject + ''' then grade else 0 end) as [' + subject + ']'
    from subject 
    order by subjectprint @Sql set @Sql = @Sql + ' into ##result from grade group by name'print @Sql exec(@Sql)select * from ##result
      

  2.   

    select @Sql = @Sql + ', sum(case subject when ''' + subject + ''' then grade else 0 end) as [' + subject + ']'
    from subject 
    order by subject这句我不明白是什么意思,老哥,能否指教一下,多谢
      

  3.   

    你可以看那两句print @Sql 显示的内容呀
    select name , sum(case subject when 'chem.' then grade else 0 end) as [chem.], sum(case subject when 'Chi.' then grade else 0 end) as [Chi.], sum(case subject when 'Eng.' then grade else 0 end) as [Eng.], sum(case subject when 'math' then grade else 0 end) as [math]
    ***************************************************************************
    select name , sum(case subject when 'chem.' then grade else 0 end) as [chem.], sum(case subject when 'Chi.' then grade else 0 end) as [Chi.], sum(case subject when 'Eng.' then grade else 0 end) as [Eng.], sum(case subject when 'math' then grade else 0 end) as [math] into ##result from grade group by name
    目的就是产生第一句语句拉
      

  4.   

    ##RESULT 是全局临时表呀,如果是#RESULT就是局部临时表
      

  5.   

    把 zkw(飞龙) 的改一下就行了,可以不用把数据放到 临时表中,直接查询出来就行了!