行列转换
问题:假设有张学生成绩表(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)

浙公网安备 33010602011771号