笨鸟1点思路都没有,不知道应该用什么方法实现,所以就把整个问题
全盘托出,望众大侠救命!!!!!!!!!SQL-SERVER中用到如下3张表:表1
学号 姓名 系别
001 AA 数学系
002 BB 物理系
003 CC 数学系
004 DD 数学系
005 EE 化学系


。表2
学号 课程代号         成绩 备注
001 111111 80
001 333333 70
002 222222 60
003 333333 病假
004 111111 60 补考


。表3
课程代号        课程名称
111111 邓论
222222 计算机基础
333333 高数1


。想实现如下报表:
先选择出系别,然后查询出系成绩单汇总。排序要求:首先按学号大小把学生排序,然后是按课程代号大小排序;
如果该学生在该课程没有成绩和备注则在相应的位置什么都不显示。
数学系成绩单汇总        (课程代号)| 1111111 |  222222 | 333333 | 。。 
学号 | 姓名 | (课程名称)|  邓论   |   计算机|  高数1 | 。。
001  | aa   | .........| 80   |    70   |       |  。            
003  | cc   |  |         |    |   病假|  。         
004  | dd   | ...........| 60 补考 |           |       |  。 




请诸位尽量给出详细代码。跪谢了先~~~~~   :~)

解决方案 »

  1.   

    在SQL SERVER用存储过程生成交叉表参考:
    http://blog.csdn.net/lihonggen0/archive/2003/05/26/13634.aspx
      

  2.   

    你这主要是用SQL语句查询的问题,然后将记录集传给报表就可以了,代码如下:Option ExplicitDim adoConnectionX As New ADODB.Connection
    Dim adoRecordsetX As New ADODB.RecordsetPrivate Sub DataReport_Initialize()
      'printer.Orientation =
      '以下准备数据源(记录集)
      '要打印的数据源(记录集)必须是一个全局级别的,或者是本设计器模块级别的记录集
      
      '数据库使用的是 Northwind.mdb
      adoConnectionX.Open "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=" & App.Path & "\Northwind.mdb"
      adoRecordsetX.Open "select * from 产品", adoConnectionX
        
      Set DataReport1.DataSource = adoRecordsetX '设置 DataReport 的数据源
      
      '-------------------------------------------------------------------------
      '以下根据控件所在区域(Sections)和所属控件类别等将它们分成若干集合
    End SubSQL用李版主给你的方法取得!!
      

  3.   

    本鸟实在是太菜了,按照李洪根给的地址那种方法还是实现不了,语句没有提示错误,但查询不出结果!!!! :(   我表里所有的字段都是CHAR型的,只有成绩字段是FLOAT型,希望哪位大侠可以给出针我的这个问题的SQL语句~~~~~中午12点在大太阳底下跪谢了!!!!!!!!!
      

  4.   

    多谢大家,现在语句已经写成了这样:
    declare @sql varchar(8000)
    set @sql = 'select 学号,'
    select @sql = @sql + 'sum(case 课程代号 when '''+课程代号+''' 
                              then 成绩 else 0 end) as '''+课程代号+''','
    from (select distinct 课程代号 from uSelectClass ) as a
    select @sql = left(@sql,len(@sql)-1) + ' from uSelectClass group by 学号'
    exec(@sql)
    go我要在查询uSelectClass表中加入条件: 
    where uSelectClass.学年度='2003-2004学年度第2学期'现在不知道应该加在哪里才能起作用,继续帮忙啊!!!!! :)
      

  5.   

    你试试这样行不行:select @sql = left(@sql,len(@sql)-1) + ' from uSelectClass 
         where 学年度=''2003-2004学年度第2学期'' group by 学号'
      

  6.   

    感谢Night_Elf()  ,但是那样不行啊,虽然语句没有提示错误,但是查询结果是空的,(不可能是无结果----表里有数据)
      

  7.   

    Night_Elf()  的语句没有错查询不到数据,楼主应该检查表中是否有满足条件:学年度='2003-2004学年度第2学期' 的数据.
      

  8.   

    declare @sql varchar(8000)
    set @sql = 'select 学号'
    select @sql = @sql + ',sum(case 课程代号 when '''+课程代号+''' 
                              then 成绩 else null end) as '''+课程代号+''''
    from (select distinct 课程代号 from uSelectClass where uSelectClass.学年度='2002-2003学年度第1学期'
    ) as a
    select @sql = @sql + ' from uSelectClass where uSelectClass.学年度=''2002-2003学年度第1学期'' group by 学号'
    exec(@sql)
    go现在语句这样了,但是当我查询学年度为2003-2004学年度第2学期的数据时,也就是把查询语句改为 
    declare @sql varchar(8000)
    set @sql = 'select 学号'
    select @sql = @sql + ',sum(case 课程代号 when '''+课程代号+''' 
                              then 成绩 else null end) as '''+课程代号+''''
    from (select distinct 课程代号 from uSelectClass where uSelectClass.学年度='2003-2004学年度第2学期'
    ) as a
    select @sql = @sql + ' from uSelectClass where uSelectClass.学年度=''2003-2004学年度第2学期'' group by 学号'
    exec(@sql)
    go以后,查询分析器总是提示:
    服务器: 消息 105,级别 15,状态 1,行 74
    字符串 '4106314' 之前有未闭合的引号。
    服务器: 消息 170,级别 15,状态 1,行 74
    第 74 行: '4106314' 附近有语法错误。注:4106314是数据库中课程代号的前一部分,课程代号长度总共12位。不知道是哪里出现问题了
    :(  真费劲啊!!!!!!!!!!!!!!!!!!!!!