我认为这个题有点难度
3个表 
 一个学生表(学生号(stid),学生名(stname)) 
 课程表(课程号(scid),课程名称(scname),) 
 成绩表(成绩(fcchj),课程号(fcid),学生号(fcid) 
 要求查寻出下面的结果 
 姓名               英语               语文               数学 
 张                     79                     80                        50 
 孙                     80                     47                        48
------解决方案----------------------如果课程是固定的 
 Select 
 	B.stname As 姓名, 
 	SUM(Case C.scname When  '英语 ' Then A.fcchj Else 0 End) As 英语, 
 	SUM(Case C.scname When  '语文 ' Then A.fcchj Else 0 End) As 语文, 
 	SUM(Case C.scname When  '数学 ' Then A.fcchj Else 0 End) As 数学 
 From 
 	成绩表 A 
 Inner Join 
 	学生表 B 
 On A.stid = B.stid 
 Inner Join 
 	课程表 C 
 On A.scid = C.scid 
 Group By 
 	B.stname   
 --如果课程不是固定的 
 Declare @S Varchar(8000) 
 Select @S =  'Select B.stname As 姓名 ' 
 Select @S = @S +  ', SUM(Case scname When  ' ' ' + scname +  ' ' ' Then fcchj Else 0 End) As  ' + scname 
 From 课程表 Group By scname 
 Select @S = @S + ' From 成绩表 A Inner Join 学生表 B On A.stid = B.stid Inner Join 课程表 C On A.scid = C.scid Group By B.stname ' 
 EXEC(@S)
------解决方案--------------------declare @S varchar(1000) 
 set @s= ' ' 
 select @s=@s+ ',sum(case scname  
 when  ' ' '+scname+ ' ' ' then fcchj else 0 end) as  '  
 + scname from 课程表 group by scname    
 select @s= 'select stname as 姓名 '+@s+ 'from  学生表 a  
 inner join 成绩表 b on a.stid=b.fcid  
 inner join 课程表 c on c.scid=b.fcid  
 group by stname '   
 exec(@s)