问题:假设有张学生成绩表(tb)如下: 
姓名 课程 分数 
张三 语文 74 
张三 数学 83 
张三 物理 93 
李四 语文 74 
李四 数学 84 
李四 物理 94 
想变成(得到如下结果):  
姓名 语文 数学 物理 
---- ---- ---- ----
 李四 74  84  94张三 74  83  93 9declare @sql varchar(8000) select @sql = isnull(@sql + ',' , '') + 课程 from tb group by 课程 exec ('select m.* , n.平均分 , n.总分 from (select * from (select 课程,分数 from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b) m , (select 姓名 , cast(avg(分数*1.0) as decimal(18,2)) 平均分 , sum(分数) 总分 from tb group by 姓名) n where m.姓名 = n.姓名')错误提示
/**
列名 '姓名' 无效。**/怎么回事啊 我就是改了一下(select * from (select * from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b) m , 
我把他变成下面这样
(select * from (select 课程,分数 from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b) m , 不知道 错在那里 

解决方案 »

  1.   

    (select * from (select 课程,分数 from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b) m你这M里面没有姓名这项
      

  2.   

    (select * from (select 姓名,课程,分数 from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b) m 
    也是没有用啊
      

  3.   

    select 课程分数 from tb
      

  4.   

    (select * from (select 姓名,课程,分数 from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b) m 
    假如 姓名是 name 
    (select * from (select name,课程,分数 from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b) m 这样就可以
     
    可是要是这样就不行 
    (select * from (select name as 姓名,课程,分数 from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b) mname as 姓名 这样就会报 name 列名无效
      

  5.   

    [name] 还是 没有用 
      

  6.   

    做出来了  
    exec ('select m.*,m.name as 姓名 , n.平均分 , n.总分 from 
     
    这样就可以了