求一SQL语句,有点困难,高手帮啊。。。。
有两个表分别是:   
 课程表   course 
 字段为: 
 课程号   cno 
 课程名   cname 
 任课教师   tno   
 成绩表   SC 
 字段为: 
 学生号   sno 
 课程号   cno 
 成绩   grade   
 现要查询学生的所有课程成绩 
 如 
 SNO   Math   English    
 2            76         78   
 其中课程名称读自课程表   
------解决方案--------------------Declare @sql varchar(8000) 
 set @sql =  'select sno ' 
 select @sql = @sql +  ',(case cno when  ' ' '+cno+ ' ' ' then grade else  ' ' ' 'end) [ '+cname+ '] ' 
  from (select distinct cno,cname from course) as a   
 Select @sql = @sql+ ' from SC   '  
 exec(@sql)
------解决方案--------------------create table course(cno int, cname varchar(20), tno int) 
 insert course select 1,  'Math ', 11 
 insert course select 2,  'English ', 12 
 insert course select 3,  'History ', 13 
 go   
 create table sc(sno int, cno int, grade int) 
 insert sc select 2, 1, 76 
 insert sc select 2, 2, 78 
 go   
 declare @sql varchar(8000) 
 set @sql= 'select sno, ' 
 select @sql=@sql+quotename(cname)+ '=max(case when cno= ' ' '+rtrim(cno)+ ' ' ' then grade end), ' 
 from course 
 select @sql=left(@sql, len(@sql)-1), @sql=@sql+ ' from sc group by sno ' 
 exec(@sql)   
 --result 
 sno         Math        English     History      
 ----------- ----------- ----------- -----------  
 2           76          78          NULL 
------解决方案-----------------------try 
 declare @sql varchar(8000) 
 set @sql= 'select sno,  ' 
 select @sql=@sql+  'sum(case when cno= ' ' ' +rtrim(cno)+  ' ' 'then grade else 0 end) as  ' ' '+rtrim(cname)+  ' ' ', ' from course 
 print @sql 
 select @sql=left(@sql,len(@sql)-1)  
 exec(@sql+ 'from sc group by sno ')   
 sno         Math        English     History      
 ----------- ----------- ----------- -----------  
 2           76          78          0   
------解决方案--------------------从静态开始吧 
 所谓的动态也就是生成一个动态的课程名,如下: 
 select sno, 
 [math]=max(case cno when  'math对应的id ' else 0 end), 
 [English]=max(case cno when   'English对应的id ' else 0 end) 
 from SC group by sno
------解决方案--------------------没有给条件赋值grade 
 select sno, 
 [math]=max(case cno when  'math对应的id '  then grade else 0 end), 
 [English]=max(case cno when   'English对应的id ' then grade else 0 end) 
 from SC group by sno