我是生手,写出给sql语句,记住要能实现我才给分。以下是三个表,表1:学生信息表,表2:课程表,表3:成绩表,查出来要像excel那样:
学号,  姓名,语文,数学,英语
200601  张三   114  120   124
表1:
sno      sname
200601   张三
表2:cno  cname
      1    语文
      2    数学表3  sno   cno   grade
    200601  1     114
    200601  2     120
要求查出以下内容:
sno      sname   1    2 
200601   张三   114  120

解决方案 »

  1.   

    行列转换问题;静态的用个case语句就可以搞定;
    动态的(例如你这种)可能还多需要一个字符串拼凑^_^
      

  2.   

    这个最好用存储过程实现,用sql写起来可读性非常差
      

  3.   

    if exists(select 1 from sysobjects where id = object_id(N't1'))
    drop table t1
    gocreate table t1 
    (sno varchar(10),
    sname varchar(10)
    )if exists(select 1 from sysobjects where id = object_id(N't2'))
    drop table t2
    go
    create table t2 
    (cno varchar(10),
    cname varchar(10)
    )
    if exists(select 1 from sysobjects where id = object_id(N't3'))
    drop table t3
    go
    create table t3 
    (sno varchar(10),
    cno varchar(10),
    grade int
    )insert into t1 values('200601','张三')
    insert into t2 values('1','语文')
    insert into t2 values('2','数学')
    insert into t3 values('200601','1',100)
    insert into t3 values('200601','2',80)
    go--执行查询
    declare @sql varchar(2000)set @sql = 'select t1.sno,t1.sname '
    select @SQl = @sql + ',sum(case t3.cno when '+ t2.cno + ' then t3.grade else 0 end) ' + t2.cname
    from t2set @Sql = @sql + ' from t1, t3 where t1.sno = t3.sno  group by t1.sno,t1.sname '
    exec( @sql)
      

  4.   

    47522341(睡到8:30) 可以实现的,我可是生手,能否解释一下,为什么要用到select 1 from sysobjects where id = object_id(N't1'),还有sum(case t3.cno when '+ t2.cno + ' then t3.grade else 0 end)中的sum干什么?我能否在dephi+access中实现
      

  5.   

    ....
    access用case不行的好象
    access的实现俺木有搞过,写不到。
      

  6.   

    47522341(睡到8:30) 可以实现的把全部成绩加起来,
    if exists(select 1 from sysobjects where id = object_id(N't1'))
    drop table t1
    gocreate table t1 
    (sno varchar(10),
    sname varchar(10)
    )if exists(select 1 from sysobjects where id = object_id(N't2'))
    drop table t2
    go
    create table t2 
    (cno varchar(10),
    cname varchar(10)
    )
    if exists(select 1 from sysobjects where id = object_id(N't3'))
    drop table t3
    go
    create table t3 
    (sno varchar(10),
    cno varchar(10),
    grade int
    )insert into t1 values('200601','张三')
    insert into t1 values('200602','李四')
    insert into t2 values('1','语文')
    insert into t2 values('2','数学')
    insert into t2 values('3','英语')
    insert into t3 values('200601','1',100)
    insert into t3 values('200601','2',80)
    insert into t3 values('200601','3',120)
    insert into t3 values('200601','1',111)
    insert into t3 values('200601','2',90)
    insert into t3 values('200601','3',124)
    go--执行查询
    declare @sql varchar(2000)set @sql = 'select t1.sno,t1.sname '
    select @SQl = @sql + ',sum(case t3.cno when '+ t2.cno + ' then t3.grade else 0 end) ' + t2.cname
    from t2set @Sql = @sql + ' from t1, t3 where t1.sno = t3.sno  group by t1.sno,t1.sname '
    exec( @sql)
    得到如下sno      sname    语文      数学    英语 
    200601 张三 211  170 244
    可我要的应是:
    sno      sname    语文      数学    英语 
    200601 张三     100  80 120
    200602   李四     111        90      124