CREATE Procedure aaaa
@classstr Varchar(10)
as 
declare @sql varchar(8000)
set @sql = 'select studentnum as 学号,studentname as 姓名'
select @sql = @sql + ',max(case coursename when '''+coursename+''' then achieve else 0 end) ['+coursename+']'
  from (select distinct coursename from coursetable_view where classidnum=@classstr) as a
select @sql = @sql+' from achievement_view where studentid in (select idnum from student where classid='''+@classstr+''' ) group by studentnum,studentname'exec(@sql)

解决方案 »

  1.   

    我想问问我认为第一个参数是决定班级的课程的,第二个是决定班级人数的啊?为什么你帮我改了第二个参数呢?还有 as  a 是把选出来的所有课程字段都 as a 了,还是其他的什么请帮我讲解讲解。谢谢你Pengdali,为什么你总是出现的那么及时啊!!!!
    还有我还想加个总分和平均分字段啊!麻烦了!
      

  2.   

    CREATE Procedure aaaa
    @classstr int
    as 
    declare @sql varchar(8000)
    set @sql = 'select studentnum as 学号,studentname as 姓名'
    select @sql = @sql + ',max(case coursename when '''+coursename+''' then achieve else 0 end)
     ['+coursename+']'
      from (select distinct coursename from coursetable_view where classidnum=@classstr) as a
    select @sql = @sql+' from achievement_view where studentid in 
    (select idnum from student where classid='+@classstr+' ) group by studentnum,studentname'exec(@sql)你的两个表的classid和classidnum列是什么类型???
    你的coursetable_view 表是????
      

  3.   

    都是char(3)
    是课程表的视图:
    CREATE VIEW COURSETABLE_VIEW
    AS SELECT dbo.coursetable.*, dbo.Class.Classname AS Classname, 
          dbo.weektab.weekname AS Weekname, dbo.nodeset.nodename AS Nodename, 
          dbo.coursename.coursename AS Coursename, 
          dbo.teacher.teachername AS Teachername
    FROM dbo.Class INNER JOIN
          dbo.coursetable ON dbo.Class.idnum = dbo.coursetable.classidnum INNER JOIN
          dbo.weektab ON dbo.coursetable.weekidnum = dbo.weektab.idnum INNER JOIN
          dbo.nodeset ON dbo.coursetable.nodeidnum = dbo.nodeset.idnum INNER JOIN
          dbo.coursename ON 
          dbo.coursetable.courseidnum = dbo.coursename.idnum INNER JOIN
          dbo.teacher ON dbo.coursetable.teacheridnum = dbo.teacher.idnum
      

  4.   

    还有你帮我解释一下我刚才的那些问题,我要是看懂了我自己可以琢磨,你主要是对我的库结构不熟,好吗?
    我再重复一遍,谢谢
    我想问问我认为第一个参数是决定班级的课程的,第二个是决定班级人数的啊?为什么你帮我改了第二个参数呢?还有 as  a 是把选出来的所有课程字段都 as a 了,还是其他的什么请帮我讲解讲解。谢谢你Pengdali,为什么你总是出现的那么及时啊!!!!
    还有我还想加个总分和平均分字段啊!麻烦了!
      

  5.   

    我想问问我认为第一个参数是决定班级的课程的,第二个是决定班级人数的啊?
      from (select distinct coursename from coursetable_view where classidnum=@classstr) as a这句吗??是决定班级的课程
    --------------------------------------
    为什么你帮我改了第二个参数呢?还有 as  a 是把选出来的所有课程字段都 as a 了,
    那你就:CREATE Procedure aaaa
    @classstr char(3)
    as 
    declare @sql varchar(8000)
    set @sql = 'select studentnum as 学号,studentname as 姓名'
    select @sql = @sql + ',max(case coursename when '''+coursename+''' then achieve else 0 end)
     ['+coursename+']'
      from (select distinct coursename from achievement_view where studentid in (select idnum from student where classid=@classstr)) a
    select @sql = @sql+' from achievement_view where studentid in 
    (select idnum from student where classid='''+@classstr+''' ) group by studentnum,studentname'exec(@sql)
      

  6.   

    还有我还想加个总分和平均分字段啊!麻烦了!
    CREATE Procedure aaaa
    @classstr char(3)
    as 
    declare @sql varchar(8000)
    set @sql = 'select studentnum as 学号,studentname as 姓名'
    select @sql = @sql + ',max(case coursename when '''+coursename+''' then achieve else 0 end)
     ['+coursename+']'
      from (select distinct coursename from achievement_view where studentid in (select idnum from student where classid=@classstr)) a
    select @sql = @sql+',sum(achieve) 总分,avg(achieve) 平均分 from achievement_view where studentid in 
    (select idnum from student where classid='''+@classstr+''' ) group by studentnum,studentname'exec(@sql)
      

  7.   

    我为什么把后面的哪个参数换成(select idnum from student where classid='+@classstr+' ),把前面的参数换成006,也就是参数的值就好了,
    大力再帮帮我吧,就剩最后一点了。谢谢了!
      

  8.   

    (select idnum from student where classid''='+@classstr+''' )吗?什么意思??
      

  9.   

    是的,就是这句有问题,但是按你改的那样,提示''处有语法错误。
    我的意思是把它改成(select idnum from student where classid=006)就好,请问该如何解决,
      

  10.   

    (select idnum from student where classid'006')吗?什么意思??
      

  11.   

    你的这个不行吧,我上想让帮我把(select idnum from student where classid=006)换成带参数的形式(select idnum from student where classid=这儿怎么写),006就是参数的值,怎么换啊????
    急啊,大哥
      

  12.   

    哎呀,终于解决了,把参数使用case(@classstr as int)转换成整形就好了,真怪,
    真诚的感谢大力大哥,谢谢,下班后揭贴。
      

  13.   

    你不是char(3)的类型吗??
    为什么要转成int????
      

  14.   

    我也不知道,而且我的类型也确实是Char(3)
    我中午的时候实在是很愚,我就在查询分析器里边改我的存储过程,最后终于好了,至于原因,我现在也不是很清楚,谢谢大力。而且我现在把求和和平均分也给去了,因为平均分它计算的时候不把0分算在里边,所以算出来的不是很标准,而总分要是有补考的情况在的话,它的总分就多了(除非补考的成绩是修改原来的成绩),
    再次感谢大力。