declare @sql Nvarchar(4000)
set @sql=N'select a.testno,a.grade,a.kldm,a.bjh'
select @sql=@sql+',['+Rtrim(projectid)+N']=sum(case a.projectid when '''+Rtrim(projectid)+N''' then a.score else 0 end)' from score_temp a  group by a.projectid
--select  @sql
exec(@sql+N',sum(a.score) as 总分 into tmp from score_temp a where a.kldm=1 group by a.testno,a.grade,a.kldm,a.bjh order by sum(a.score) desc')Select *,年级名次=(Select Count(*)+1 from tmp Where 总分>a.总分 And grade=a.grade And kldm=a.kldm),班级名次=(Select Count(*)+1 from tmp Where 总分>a.总分 And kldm=a.kldm)
from tmp a
GO
drop table score_temp这是我写的程序有问题!
_RecordsetPtr CSchoolScore::GetMcData(CString myconn)
{
//连接数据库

ADOConn m_AdoConn;
m_AdoConn.OnInitADOConn();
//设置SELECT语句
_bstr_t vSQL1,vSQL2,vSQL3,vSQL4,vSQL5;
vSQL4 = "if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[score_temp]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[score_temp]";
m_AdoConn.ExecuteSQL(vSQL4);   vSQL1 = "SELECT dbo.info_base.schoolno, dbo.testno.testno, dbo.scoreschool.score, "; 
      vSQL1 +="dbo.scoreschool.projectID, dbo.info_base.grade, dbo.info_base.bjh, ";
      vSQL1 +="dbo.info_base.kldm ";
  vSQL1 +="into score_temp ";
  vSQL1 +="FROM dbo.testno INNER JOIN ";
      vSQL1 +="dbo.scoreschool ON dbo.testno.testno = dbo.scoreschool.testno AND ";
      vSQL1 +="dbo.testno.testdate = dbo.scoreschool.testdate INNER JOIN ";
      vSQL1 +="dbo.info_base ON dbo.testno.schoolno = dbo.info_base.schoolno ";
  //vSQL = vSQL+ myconn;
m_AdoConn.ExecuteSQL(vSQL1);
  //vSQL2 = "select * from score_temp";
  //ExecuteSQL(vSQL);
  
vSQL5 ="declare @sql Nvarchar(4000) ";
m_AdoConn.ExecuteSQL(vSQL5);
vSQL5 ="set @sql=N'select a.testno,a.grade,a.kldm,a.bjh' ";
m_AdoConn.ExecuteSQL(vSQL5);
vSQL5="select @sql=@sql+',['+Rtrim(projectid)+N']=sum(case a.projectid when '''+Rtrim(projectid)+N''' then a.score else 0 end)' from score_temp a  group by a.projectid ";
m_AdoConn.ExecuteSQL(vSQL5);
vSQL5 ="exec(@sql+N',sum(a.score) as 总分 into tmp from score_temp a where a.kldm=1 group by a.testno,a.grade,a.kldm,a.bjh order by sum(a.score) desc') ";
m_AdoConn.ExecuteSQL(vSQL5);
vSQL5 ="Select *,年级名次=(Select Count(*)+1 from tmp Where 总分>a.总分 And grade=a.grade And kldm=a.kldm),班级名次=(Select Count(*)+1 from tmp Where 总分>a.总分 And kldm=a.kldm) ";
vSQL5 +="from tmp a ";
//vSQL +="GO ";
//vSQL +="drop table tmp,score_temp ";

//执行SELETE语句
_RecordsetPtr m_pRecordset;
m_pRecordset = m_AdoConn.GetRecordSet(vSQL5);
//返回各列的值
return m_pRecordset;

//断开与数据库的连接
vSQL3 = " drop table score_temp";
  m_AdoConn.ExecuteSQL(vSQL3); m_AdoConn.ExitConnect();
}