学号          科目         成绩         
----------- ---------- ---------- 
1           语文         60.0
1           数学         70.0
1           英语         75.0
2           语文         55.0
2           数学         53.0
2           英语         71.0
3           语文         80.0
4           数学         .0
5           英语         91.0--执行查询
declare @sql varchar(8000)  
set @sql = ''
select @sql=@sql+ ','+科目+'=max(case 科目 when '''+科目+''' then 成绩 else 0 end)'
from temp
group by 科目
exec('select b.*,a.总分,a.平均分 
      from(select 学号, sum(成绩)总分, sum(成绩)/count(学号)平均分 from temp group by 学号)a,
          (select 学号' +@sql+ '  from temp  group by 学号)b 
      where a.学号=b.学号')
--结果
学号          数学         英语         语文         总分                                       平均分                                      
----------- ---------- ---------- ---------- ---------------------------------------- ---------------------------------------- 
1           70.0       75.0       60.0       205.0                                    68.333333
2           53.0       71.0       55.0       179.0                                    59.666666
3           .0         .0         80.0       80.0                                     80.000000
4           .0         .0         .0         .0                                       .000000
5           .0         91.0       .0         91.0                                     91.000000

解决方案 »

  1.   

    谢谢 但是我更想知道 
    功能中的sql语句 max(case Xueke when '''+Xueke+''' then Chengji else 0 end)'其中 ''' 三个单引号连续使用的语法问题 为什么用三个而不是两个 我有些分辨不清初 
      

  2.   

    因为"Xueke"是变量。相当于‘“+Xueke+”’
      

  3.   

    Xueke 字段是字符串类型,所以要加引号,'''' 表示引用了一个引号!比如:
    declare @s  char
    set @s = ''''    print '@s = ' + @s    那么打印出来就是 @s = '