/* 标题:普通行列转换(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 课程2 课程3。。课程n ---- ---- ---- ----
李四 74 84 94
张三 74 83 93 ------------------- 没有多少时间能写明白,希望能大家能理解
http://topic.csdn.net/u/20091027/20/577cadc5-dbc6-4292-b3a9-42ae5501183c.html
忘了说了,不要动态的sql
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)