假设有张学生成绩表(CJ)如下 
[姓名] [学科] [成绩] 
张三 语文 80 
张三 数学 90 
张三 物理 85 
李四 语文 85 
李四 数学 92 
李四 物理 82 
王五 数学 60 想变成 
[姓名] [语文] [数学] [物理] 
张三 80 90 85 
李四 85 92 82 
王五 null 60 null 请问用sql语句如何实现上述的显示???sql server2000
谢谢各位老大啦,小弟我想了一整天都还在发闷!

解决方案 »

  1.   

    怎么实现啊?能用sql语句写详细一点给我吗?谢谢!
      

  2.   

    http://community.csdn.net/Expert/topic/5335/5335541.xml?temp=.4141199
      

  3.   

    select 姓名 ,SUM(case 学科 when '语文' then 成绩 else 0 end) as 语文
    ,SUM(case 学科 when '数学' then 成绩 else 0 end) as 数学
    ,SUM(case 学科 when '物理' then 成绩 else 0 end) as 物理from cj
     
    group by 姓名
      

  4.   

    用SQL语句实现,将行列转换。
    http://www.mysdn.cn/shujukukaifa/MS-SQL_Server/20061111/66857.html
      

  5.   

    但学科字段里的记录值是动态增加的,如果像上面的方法去做的话就只能是固定的,如何用动态sql语句?
      

  6.   

    declare @sql varchar(4000)
    set @sql = 'select Name as ' + '姓名'
    select @sql = @sql + ' , sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
    from (select distinct Subject from rowtocol) as a
    set @sql = @sql + ' from rowtocol group by name'
    exec(@sql)
      

  7.   

    执行后出错,说:sum or average aggregate 运算不能以 char 数据类型作为参数。
    还有,那个from (select distinct Subject from rowtocol) as a 中的“a“是什么?
      

  8.   

    问题解决了!!哈哈……谢谢各位老大的帮忙!小弟感激不尽!!!
    原来sum(case Subject when '''+Subject+''' then Result end)要改成:
    sum(case Subject when '''+Subject+''' then Result else 0 end)
    这样的话王五的语文和物理的成绩只能显示成0了,而不是null
    接分吧,哈哈……