行列转换

问题:假设有张学生成绩表(tb)如下:
姓名 课程 分数
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
想变成(得到如下结果):
姓名 语文 数学 物理
-- ---- ---- ----
李四 74   84   94
张三 74   83   93
-----------------

方法1:普通SQL语句转换(用CASE WHEN)

select 姓名 as 姓名 ,
  max(case 课程 when '语文' then 分数 else 0 end) 语文,
  max(case 课程 when '数学' then 分数 else 0 end) 数学,
  max(case 课程 when '物理' then 分数 else 0 end) 物理
from tb
group by 姓名

方法2:用PIVOT函数

select 姓名,
 语文,
数学,
物理
from
(select 姓名,课程,分数 from tb )as sourceTable
pivot(sum(分数) for 课程 in ([语文],[数学],[物理])) as pivotedTable
(参考文档http://technet.microsoft.com/zh-cn/library/ms177410.aspx

posted @ 2009-07-26 18:02  大有  阅读(135)  评论(0)    收藏  举报