declare @specialty varchar(20),@grade varchar(20),@semester varchar(20),@course_kind varchar(20)
set @specialty   = '...'
set @grade       = '...'
set @semester    = '...'
set @course_kind = '...'declare @s varchar(8000)
set @s='select a.stu_ID,a.stu_name'select 
    @s=@s+',['+course_name+']=max(case b.course_ID when '+rtrim(course_ID)+' then b.course_score end)' 
from 
    course_fix a,course b 
where 
    a.course_ID = b.course_ID and a.specialty = @specialty and a.grade = @grade 
    and
    a.semester = @semester and b.course_kind = @course_kindset @s=@s+' from stu_info a,score b where a.stu_ID=b.stu_ID and a.semester='''+@semester+''' group by a.stu_ID,a.stu_name'exec(@s)

解决方案 »

  1.   

    可能子陌大哥没看懂我的表(有些乱,呵呵)
    course表记录课程信息 course_ID课程号course_name课程名course_kind类别(如:选修必修)
    course_fix表用来决定课程 所学课程因 专业 年级和学期 而不同
    stu_info表用来记录学生信息 stu_ID学号 stu_name姓名 stu_specialty 专业 上面拉了一个stu_grade年级
    score表用来记录成绩 学号 课程名 成绩 和 学期
      

  2.   

    declare @specialty varchar(20),@grade varchar(20),@semester varchar(20),@course_kind varchar(20)
    set @specialty   = '...'  --专业
    set @grade       = '...'  --学年
    set @semester    = '...'  --学期
    set @course_kind = '...'  --课程种类declare @s varchar(8000)
    set @s='select a.stu_ID,a.stu_name'select 
        @s=@s+',['+course_name+']=max(case b.course_ID when '+rtrim(course_ID)+' then b.course_score end)' 
    from 
        course_fix a,course b 
    where 
        a.course_ID = b.course_ID 
        and 
        a.specialty = @specialty       --从课程确定表选择符合专业条件的课程信息
        and 
        a.grade = @grade               --从课程确定表选择符合年级条件的课程信息
        and
        a.semester = @semester         --从课程确定表选择符合学期条件的课程信息
        and 
        b.course_kind = @course_kind   --从课程表选择符合课程种类条件的课程信息set @s=@s+' from stu_info a,score b where' 
             +' a.stu_ID=b.stu_ID '
             +' and a.stu_specialty ='''+@specialty+''''    --从stu_info表筛选符合专业条件的学生信息
             +' and b.semester      ='''+@semester +''''    --从score   表筛选符合学期条件的成绩信息
             +' group by a.stu_ID,a.stu_name'print @sexec(@s)