前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >查询结果行转列?

查询结果行转列?

作者头像
乐心湖
发布2020-07-31 16:29:32
1.5K0
发布2020-07-31 16:29:32
举报
文章被收录于专栏:MyTechnologyMyTechnology

需求:查看学生各类课程已获得的总学分。最终效果如下。

场景:数据库的结构中有三张表,学生表,课程表,成绩表。每个课程有着不同的学分,所以需要查学生的成绩中对应的课程。然后SUM求和。

先简单用sql来实现,

代码语言:javascript
复制
SELECT 
g.s_num number, s.name name, c.name, SUM(c.credit)
FROM grade g, course c, student s 
WHERE  g.c_id = c.id AND s.number = g.s_num GROUP BY g.s_num,c.sort;

发现事情并不简单,课程类别显示在行内,那这样一个人的结果就有好几个了。如何只是一对一还可以在java中用map来映射,现在一个人就有好几条结果,无疑给我增加了不少难度。想了很多方法,最后还是想把他换成列。

整理后的sql语句,很明显效果就是我需要的了。

只需要把别名改成英文,就可以在java中一一映射。

代码语言:javascript
复制
SELECT
g.s_num number, s.name name,
SUM(CASE c.sort WHEN '专业支撑课' THEN c.credit END) 专业支撑课,
SUM(CASE c.sort WHEN '公共必修课' THEN c.credit END) 公共必修课,
SUM(CASE c.sort WHEN '集中实践课' THEN c.credit END) 集中实践课,
SUM(CASE c.sort WHEN '素质拓展课' THEN c.credit END) 素质拓展课,
SUM(CASE c.sort WHEN '专业拓展课' THEN c.credit END) 专业拓展课,
SUM(CASE c.sort WHEN '专业核心课' THEN c.credit END) 专业核心课
FROM grade g, course c, student s WHERE  g.c_id = c.id AND s.number = g.s_num GROUP BY g.s_num ORDER BY s.claee;
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档