森森快跑

走得累,走得苦,那是因为在走上坡路。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

简单的数据库表行列转换实例

Posted on 2015-11-02 22:30  森森快跑  阅读(344)  评论(0编辑  收藏  举报

原表如下:

列转行:

select 姓名,
  MAX(CASE 课程 when '语文' then 分数 else 0 END) 语文,
  MAX(CASE 课程 when '数学' then 分数 else 0 END) 数学,
  MAX(CASE 课程 when '物理' then 分数 else 0 END) 物理
from 成绩
GROUP BY 姓名

得到如下结果:

 

反过来,行转列:

select * from (
  select 姓名,'语文' 课程, 语文 分数 from 成绩2 UNION
  select 姓名,'数学' 课程, 数学 分数 from 成绩2 UNION
  select 姓名,'物理' 课程, 物理 分数 from 成绩2 ) t
ORDER BY 姓名,case 课程 when '语文' then 1 when '数学' then 2 when '物理' then 3 end