create table 学生表(学号 int ,姓名 varchar(20))
insert into 学生表 values(1,'YOki')
insert into 学生表 values(2,'Tom')
go
create table 课程表(课程号 int ,课程名称 varchar(20))
insert into 课程表 values(1,'数学')
insert into 课程表 values(2,'英语')
insert into 课程表 values(3,'化学')
go
create table 成绩表(学号 int,课程号 int,分数 int)
insert into 成绩表 values(1,1,57)
insert into 成绩表 values(1,2,44)
insert into 成绩表 values(1,3,90)
insert into 成绩表 values(2,1,45)
insert into 成绩表 values(2,3,99)
insert into 成绩表 values(3,2,88)select (select 姓名 from 学生表 where 学号=a.学号) as 学生姓名,
       (select 课程名称 from 课程表 where 课程号=a.课程号) as 课程名称,
        分数
into #temp
from 成绩表 a declare @sql varchar(8000)
set @sql='select 学生姓名'
select @sql=@sql+',case 课程名称 when '''+课程名称+''' then 分数 else 0 end as '+课程名称
from (select distinct 课程名称 from #temp) as a
select @sql=@sql+' from #temp'
exec(@sql)
drop table #temp

解决方案 »

  1.   

    declare @sql varchar(8000)
    set @sql='select 学生姓名'
    select @sql=@sql+',case 课程名称 when '''+课程名称+''' then 分数 else null end as '+课程名称
    from 
    (select distinct 课程名称 
     from
    (   select(select 姓名 from 学生表 where 学号=a.学号) as 学生姓名,
             (select 课程名称 from 课程表 where 课程号=a.课程号) as 课程名称,
              分数  
        from 成绩表 a 
    )b 
    )c
    select @sql=@sql+' from 
    (select (select 姓名 from 学生表 where 学号=a.学号) as 学生姓名,
            (select 课程名称 from 课程表 where 课程号=a.课程号) as 课程名称,
            分数 from 成绩表 a )b'
    exec(@sql)
      

  2.   

    create table 学生表(学号 int ,姓名 varchar(20))
    insert into 学生表 values(1,'YOki')
    insert into 学生表 values(2,'Tom')
    go
    create table 课程表(课程号 int ,课程名称 varchar(20))
    insert into 课程表 values(1,'数学')
    insert into 课程表 values(2,'英语')
    insert into 课程表 values(3,'化学')
    go
    create table 成绩表(学号 int,课程号 int,分数 int)
    insert into 成绩表 values(1,1,57)
    insert into 成绩表 values(1,2,44)
    insert into 成绩表 values(1,3,90)
    insert into 成绩表 values(2,1,45)
    insert into 成绩表 values(2,3,99)
    select (select 姓名 from 学生表 where 学号=a.学号) as 学生姓名,
           (select 课程名称 from 课程表 where 课程号=a.课程号) as 课程名称,
            分数
    into #temp
    from 成绩表 a declare @sql varchar(8000)
    set @sql='select 学生姓名'
    select @sql=@sql+',case 课程名称 when '''+课程名称+''' then 分数 else 0 end as '+课程名称
    from (select distinct 课程名称 from #temp) as a
    select @sql=@sql+' from #temp'
    exec(@sql)
    drop table #temp
      

  3.   

    yoki(小马哥) 你的这个一看就知道威力非凡。但是偶功底太差  看不明白 运用也不顺手  你看能否适当增加注释  select (select 姓名 from 学生表 where 学号=a.学号) as 学生姓名,
           (select 课程名称 from 课程表 where 课程号=a.课程号) as 课程名称,
            分数
    into #temp
    from 成绩表 a   这个是不是建立一个临时表呢??那个a怎么回事?
    一看到@   和  +  ''  我都昏了~~~~~
      

  4.   

    a是别名
    你全部拷贝到查询分析器里运行一下就知道了
    其实不难的,你可以参考一下联机帮助
    你对sql不熟,先找本入门的书看看吧
      

  5.   

    yoki(小马哥)
    是这样的,我去年的时候学习过foxpro,今年开始学习asp建设一个学生管理系统,用的是access数据库。所以我现在没有查询分析器,也没有联机帮助,但是我承认我对sql不熟(偶只有一个三角)。其实你给的答案也说明你对我的要求非常了解,知道我想要干什么,教教我吧?
      

  6.   

    学生表里面学生    10000个
    课程表里的课程    500个
    成绩表的记录      2000个现在我想把本班的学生全部成绩显示出来()按照这个格式。
    就这点要求。sql=select 学生.姓名,课程.课程名称,成绩.分数 from 学生,课程,成绩 where 学生.班号=指定班号 and 学生.学号=成绩.学号 and 成绩.课程号=课程.课程号这个肯定达不到要求但是表达的意思我觉得很明确。格式:
            课程1    课程2     课程3    课程4   ……(总数未知)学生一    A        B学生二    C      ?%#?          D学生三             E         F。


    总数未知?%#?:(结果中没有该项内容)比如没有数据库的成绩信息。
      

  7.   

    我就是照着你的要求写得呀,用下面的代码就可以实现select (select 姓名 from 学生表 where 学号=a.学号) as 学生姓名,
           (select 课程名称 from 课程表 where 课程号=a.课程号) as 课程名称,
            分数
    into #temp
    from 成绩表 a declare @sql varchar(8000)
    set @sql='select 学生姓名'
    select @sql=@sql+',case 课程名称 when '''+课程名称+''' then 分数 else 0 end as '+课程名称
    from (select distinct 课程名称 from #temp) as a
    select @sql=@sql+' from #temp'
    exec(@sql)
    drop table #temp
      

  8.   

    这是结果:学生姓名                 化学          数学          英语          
    -------------------- ----------- ----------- ----------- 
    YOki                           0          57           0 
    YOki                           0           0          44 
    YOki                          90           0           0 
    Tom                            0          45           0 
    Tom                           99           0           0
      

  9.   

    select (select 姓名 from 学生表 where 学号=a.学号) as 学生姓名,
           (select 课程名称 from 课程表 where 课程号=a.课程号) as 课程名称,
            分数
    into #temp
    from 成绩表 a declare @sql varchar(8000)
    set @sql='select 学生姓名'
    select @sql=@sql+',sum(case 课程名称 when '''+课程名称+''' then 分数 else 0 end) as '+课程名称
    from (select distinct 课程名称 from #temp) as a
    select @sql=@sql+' from #temp group by 学生姓名'
    exec(@sql)
    drop table #temp结果:(所影响的行数为 5 行)学生姓名                 化学          数学          英语          
    -------------------- ----------- ----------- ----------- 
    Tom                           99          45           0 
    YOki                          90          57          44 
      

  10.   

    因为你用了as,所以我就找不着北了。
    学生信息:::jiben.xuehao,jiben.banhao,jiben.xingming
    课程信息:::kecheng.ID,kecheng.kecheng
    成绩表::::chengji.xuehao,chengji.ID,chengji.fenshusql="select jiben.xingming,kecheng.kecheng,chengji.fenshu from jiben,kecheng,chengji where jiben.banhao='"&banji&"' and jiben.xuehao=chengji.xuehao and chengji.ID=kecheng.ID order by xingming asc"
    set rs=newconn.execute(sql)
    if not rs.eof then<% do while not rs.eof%>
    <%=rs("kecheng")%>的成绩单:<br>
    <%=rs("xingming")%><%=rs("fenshu")%><br><br><br>
    <% rs.movenext
    loop
    %>大哥你帮我写写这个??
      

  11.   

    不是我不爱学习,也不是我懒惰,
    (select 课程名称 from 课程表 where 课程号=a.课程号) as 课程名称,
       
    select @sql=@sql+',sum(case 课程名称 when '''+课程名称+''' then 分数 else 0 end) as '+课程名称我不知道哪个是字段,哪个是别名,明白我的意思?
      

  12.   

    Microsoft VBScript 编译器错误 (0x800A03FD)
    /asp/xsgl/quest4.asp, 第 43 行, 第 7 列
    select (select xingming from jiben where xuehao=a.xuehao) as xingming,
    ------^
    select (select xingming from jiben where xuehao=a.xuehao) as xingming,
           (select kecheng from kecheng where ID=a.ID) as kecheng,
            fenshu
    into #temp
    from chengji a declare @sql varchar(8000)
    set @sql='select xingming'
    select @sql=@sql+',sum(case kecheng when '''+kecheng+''' then fenshu else 0 end) as '+kecheng
    from (select distinct kecheng from #temp) as a
    select @sql=@sql+' from #temp group by xingming'
    exec(@sql)
    drop table #temp
      

  13.   

    Microsoft VBScript 编译器错误 (0x800A03FD)
    /asp/xsgl/quest4.asp, 第 43 行, 第 7 列
    select (select xingming from jiben where xuehao=a.xuehao) as xingming,
    ------------------------------------------------^
      

  14.   

    修改如下:
    select (select xingming from jiben where xuehao=a.xuehao) as 学生姓名,
           (select kecheng from kecheng where ID=a.ID) as 课程名称,
            fenshu
    into #temp
    from chengji a declare @sql varchar(8000)
    set @sql='select 学生姓名'
    select @sql=@sql+',sum(case 课程名称 when '''+课程名称+''' then 分数 else 0 end) as '+课程名称
    from (select distinct 课程名称 from #temp) as a
    select @sql=@sql+' from #temp group by 学生姓名'
    exec(@sql)
    drop table #temp
      

  15.   


     yoki(小马哥) ::测试如下:Microsoft VBScript 编译器错误 (0x800A03FD)
    /asp/xsgl/quest4.asp, 第 46 行, 第 7 列
    select (select xingming from jiben where xuehao=a.xuehao) as 学生姓名,
    -----------------------------------------------^