一条SQL语句的困惑
现有学生表(Student):StuID(自动增长,学生ID),Name(学生姓名)
成绩表(Score):ID(自动增长),StudentId(学生表外键),Score(分数),SubID(科目编号)
科目表(Subject):SubID(自动增长,科目编号,Score表外键),SubName(科目名称)
数据如下:
   Student表
StuID    Name
  1      张三
  2      李四   Score表
ID   StudentID  Score  SubID
 1     1        86     1
 2     2        80     1
 3     1        92     2  Subject表
SubID    SubName
 1       语文
 2       数学现在想得到这样的结果:
查询所有学生考试,然后把科目名称当做列名显示:ID  Name 语文  数学
1   张三 86    93   这里把科目表的字段当做列名,如何修改
求一条SQL语句,,,,,等待解决。。

解决方案 »

  1.   

    select 姓名 姓名,
      max(case 课程 when '语文' then 分数 else 0 end) 语文,
      max(case 课程 when '数学' then 分数 else 0 end) 数学,
    from tb
    group by 姓名自己根据两个表来
      

  2.   


    select 姓名 姓名,
      max(case 课程 when '语文' then 分数 else 0 end) 语文,
      max(case 课程 when '数学' then 分数 else 0 end) 数学,
    from 
    (select  a.Name,b.Score  ,c.SubName  from Student a ,Score b ,Subject c where a.StuID=b.StudentID  ) 
    b.SubID =c.SubID)
    group by 姓名
      

  3.   


    --#A Student
    --#B Score
    --#C Subject
    select 姓名=max(name),语文=max(case subname when '语文' then score end),数学=max(case subname when '数学' then score end) from (select a.name,b.score,c.subname from #A a left join #B b on a.stuid=b.stuid inner join #C c on b.subid=c.subid) A group by name/*
    姓名                                                 语文          数学
    -------------------------------------------------- ----------- -----------
    李四                                                 80          NULL
    张三                                                 86          92
    */
      

  4.   

    动态读取科目--临时表对应实体表
    --#A Student
    --#B Score
    --#C Subjectdeclare @sql varchar(8000)set @sql='select max(name) Name'
    select @sql=@sql+','+c.subname+'=max(case subname when '''+c.subname+''' then score end)'
    from #C cset @sql=@sql+' from (select a.name,b.score,c.subname from #A a left join #B b on a.stuid=b.stuid inner join #C c on b.subid=c.subid) A group by name'exec (@sql)/*Result:
    姓名                                                 语文          数学
    -------------------------------------------------- ----------- -----------
    李四                                                 80          NULL
    张三                                                 86          92*/
      

  5.   


    要的就是这样的,动态读取科目,但是我想在一条SQL语句中实现,怎么办?期待更好的答案……