成绩表字段如下   
ID CourseID   studentID   考试时间   成绩   班级ID   现能否在VB的 Datagrid 中实现如下形式的显示结果(某班某学期成绩) 
  
编号  studentID  课程名1 课程名2  ...  总分 平均分  名次      
课程名在另一个表中
我用ADO控件实现,编号,名次,条件(WHERE)将如何增加以下是他们放过来的,但是编号,与名次未有解决
declare @s varchar(8000)select @s = isnull(@s+',','') + '[CourseID('+ltrim(CourseID)+')]=max(case when CourseID = '+
            ltrim(CourseID) + ' then Score else 0 end)'
from (select distinct CourseID from Scores ) aexec(' select studentID,'+@s+',总分=sum(Score) ,平均分= avg(Score) from Scores group by studentID order by sum(Score) desc')在SQL中查询没问题,但是在VB中就不行了

解决方案 »

  1.   

    在SQL中查询没问题,但是在VB中就不行了
      

  2.   

    代码如下(编号,名次,条件(WHERE)都没有增加)ADOclass.ConnectionString = ConnString1/* 公共模块里定义了
      ADOclass.CommandType = adCmdText
      
      strSQL = "declare @s varchar(8000)"
      strSQL = strSQL + " select @s = isnull(@s+',','') + '[CourseID('+ltrim(CourseID)+')]=max(case when CourseID = '+"   (VB代码里为一行,接max后面)
      strSQL = strSQL + "ltrim(CourseID) + ' then Score else 0 end)'"
      strSQL = strSQL + "from (select distinct CourseID from Scores ) a"
      strSQL = strSQL + "exec(' SELECT StudentID,'+@s+',SUM(Score) AS 总分 , AVG(Score) AS 平均分 FROM Scores GROUP BY StudentID ORDER BY SUM(Score) DESC')"
      ADOclass.RecordSource = strSQL
      ADOclass.Refresh
      Set dgClass.DataSource = ADOclass
    运行就是不对
      

  3.   


    VB中不能这样写,你写在存储过程中,VB调用存储过程
      

  4.   

    老兄,你能否具体写下吗,我很不清楚存储过程,我提的问题也还没有安全解决呢
    编号,名次,条件(WHERE)?
      

  5.   

    VB是通过数据库引擎去执行SQL语句的,你的语法是SQL数据库的语法,数据库引擎是识别不了的
    SQL数据库不是有存储过程吗?你将SQL中查询能通过的代码,写成SQL数据库中的存储过程,然后VB直接调用这个存储过程
      

  6.   

    老兄,名次那列能否也在存储过程中添加 如何取值我要的是X班X学期的成绩排名
    应该把WHERE 条件语句放在存储过程那个位置