表如下:学生表
学生编号 学生名
101 张三 
102 李四
103 王五
104 甲六
课程表
课程编号 课程名
201 语文
202 数学
203 英语分数表 学生编号 课程编号 分数
102 201 82
102 202 60
102 203 65
101 201 62
101 202 45
101 203 35
103 201 78
103 202 65
103 203 98
根据以上三表合成一个动态的学生成绩表在dbgrid 中显示学生名  课程1 课程2 课程3 课程4 
姓名    分数1  分数2 分数3 分数4

解决方案 »

  1.   

    利用sql语句,然后将dbgrid的数据源设置为query1.
      

  2.   

    declare @aa table (xsid int ,xsname char(8))
    insert @aa values(101, '张三') 
    insert @aa values(102,' 李四')
    insert @aa values(103, '王五')
    insert @aa values(104, '甲六')
    declare @bb table (kcid int ,kcname char(8))
    insert @bb values(201, '语文')
    insert @bb values(202, '数学')
    insert @bb values(203, '英语')declare @cc table (xsid int,kcid int,fs int)
    insert @cc values(102, 201, 82)
    insert @cc values(102, 202, 60)
    insert @cc values(102, 203, 65)
    insert @cc values(101, 201, 62)
    insert @cc values(101, 202, 45)
    insert @cc values(101, 203, 35)
    insert @cc values(103, 201, 78)
    insert @cc values(103, 202, 65)
    insert @cc values(103, 203 ,98)if object_id('tempdb..#dd')>0  drop table #dd
    select xsname,kcname,fs into #dd from @aa a,@bb b,@cc c where a.xsid=c.xsid and b.kcid=c.kcid
    declare @sSql nvarchar(800)
    set @sSql='select xsname'
    select @sSql=@sSql+',sum(case when kcname='''+kcname+''' then fs else 0 end) as '+kcname
    from (select distinct kcname from #dd) AA
    set @sSql=@sSql+' from #dd group by xsname'
    exec sp_executesql @sSql
      

  3.   

    declare @aa table (xsid int ,xsname char(8))
    insert @aa values(101, '张三') 
    insert @aa values(102,' 李四')
    insert @aa values(103, '王五')
    insert @aa values(104, '甲六')
    declare @bb table (kcid int ,kcname char(8))
    insert @bb values(201, '语文')
    insert @bb values(202, '数学')
    insert @bb values(203, '英语')declare @cc table (xsid int,kcid int,fs int)
    insert @cc values(102, 201, 82)
    insert @cc values(102, 202, 60)
    insert @cc values(102, 203, 65)
    insert @cc values(101, 201, 62)
    insert @cc values(101, 202, 45)
    insert @cc values(101, 203, 35)
    insert @cc values(103, 201, 78)
    insert @cc values(103, 202, 65)
    insert @cc values(103, 203 ,98)if object_id('tempdb..#dd')>0  drop table #dd
    select xsname,kcname,fs into #dd from @aa a,@bb b,@cc c where a.xsid=c.xsid and b.kcid=c.kcid
    declare @sSql nvarchar(800)
    set @sSql='select xsname'
    select @sSql=@sSql+',sum(case when kcname='''+kcname+''' then fs else 0 end) as '+kcname
    from (select distinct kcname from #dd) AA
    set @sSql=@sSql+' from #dd group by xsname'
    exec sp_executesql @sSql