急,急,急!!!SQL的行列转换问题
/*  标题:普通行列转换(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  -------------------  
没有多少时间能写明白,希望能大家能理解
------解决方案--------------------里面不是有动态的吗
------解决方案--------------------你把动态字符串全部print出来,就是那个变量@sql,然后看下执行下就知道了,一般的动态就是拼case when语句,其外部有聚合函数,例如count max min sum等,05及以上版本可以用pivot等其他方法。
------解决方案--------------------http://blog.csdn.net/xys_777/article/details/5685953
去看看这个。
------解决方案--------------------用动态sql
SQL code
declare @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)