/*  标题:普通行列转换(version 2.0)  作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)  时间:2008-03-09  地点:广东深圳  说明:普通行列转换(version 1.0)仅针对sql server 2000提供静态和动态写法,version 2.0增加sql server 2005的有关写法。    问题:假设有张学生成绩表(tb)如下:  姓名 课程 分数  张三 语文 74  张三 数学 83  张三 物理 93  李四 语文 74  李四 数学 84  李四 物理 94  想变成(得到如下结果):   姓名 语文 数学 物理   ---- ---- ---- ----  李四 74   84   94  张三 74   83   93  -------------------  */
一部分是类似的,现在我的课程的数量很多,不知道有多少,名称也是未知了,
想变成(得到如下结果):   
姓名 课程1  课程2 课程3。。课程n   ---- ---- ---- ----  
李四 74   84   94  
张三 74   83   93  ------------------- 没有多少时间能写明白,希望能大家能理解

解决方案 »

  1.   

    引得是这个:
    http://topic.csdn.net/u/20091027/20/577cadc5-dbc6-4292-b3a9-42ae5501183c.html
      

  2.   


    忘了说了,不要动态的sql
      

  3.   

    你把动态字符串全部print出来,就是那个变量@sql,然后看下执行下就知道了,一般的动态就是拼case when语句,其外部有聚合函数,例如count max min sum等,05及以上版本可以用pivot等其他方法。
      

  4.   

    没弄懂动态sql和存储过程是怎么个关系,我不想用存储过程去写这个。
      

  5.   

    没弄懂动态sql和存储过程是怎么个关系,我不想用存储过程去写这个。
      

  6.   

    http://blog.csdn.net/xys_777/article/details/5685953去看看这个。
      

  7.   

    用动态sqldeclare @sql varchar(8000)
    set @sql = 'select 姓名 '
    select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
    from (select distinct 课程 from tb) as a
    set @sql = @sql + ' from tb group by 姓名'
    exec(@sql)