表scores

请转成的横表是这样子的:

//

::::我们来分析下:首先 姓名这一列肯定是不重复的姓名【重复也没办法了 这需求只能这样了】 因此 我们用group by 【姓名】 然后姓名这一列就有了 其它的三列也就是需要凑起来 对吧!!!! 我们切记。聚合函数就是只有一列的!!!这个特性正好被使用。嘿嘿 我们就用聚合函数 可以用 sum 呀  max  min 这些不都行吗!!!

对了 这里对于【重复姓名】咱们不管哈 否则这样想想好像有问题!!!

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

--延伸 select id,max(case when saleBill=222 then 222 end ) from ChuKuBill group by id 这里没有else 则默认的else 为null

:::反过来 要把横表变成上面的一列一列的表怎么办呢?我们分析列表只有三列 对吧!!效果是相当于把【张三+语文+分数;张三+数学+分数。。】+【李四+语文+分数;李四+数学+分数。。】  一列一列叠起来的情况:我们有union和union all 解决 区别是 union会去重 我们这里就不让它去重了哈 【去重也无所谓  两列不可能都相同】

分析下表头 表头不存在我们用AS别名出来  总体看下来就是 select 姓名,'语文' as 课程,语文 as 分数 对吧!! 张三的语文成绩出来了 如法炮制 张三的数学成绩 最后联合李四的

select 姓名,
'语文' as 课程,
语文 as 分数
from scores2
union all
select 姓名,
'数学' as 课程,
数学 as 分数
from scores2
union all
select 姓名,
'物理' as 课程,
物理 as 分数
from scores2
order by 姓名 desc  【这个有问题2019.10.28】

答案;

select 姓名,
SUM(case 课程 when '语文' then 分数 else 0 end) as 语文,
SUM(case 课程 when '数学' then 分数 else 0 end) as 数学,
SUM(case 课程 when '物理' then 分数 else 0 end) as 物理

---------------------

最新文章

  1. HTTPS的一些疑问解答
  2. java字符串相关
  3. linux之tmpwatch命令
  4. poj 2186 tarjan求强连通分量
  5. linux中文显示乱码的解决办法
  6. NDK(6)eclipse下断点调试ndk代码
  7. My集合框架第六弹 左式堆
  8. hdu 4679 树状dp
  9. GNU project C
  10. 第三天 函数 三元运算 lambda表达式 内置函数 文件操作
  11. node.js前后台交互示例 -- 使用node.js实现用户注册功能
  12. Eclipse安装svn插件的几种方式 转帖....
  13. C# 判断用户是否对路径拥有访问权限
  14. Java基本语法(一)
  15. /proc文件系统(一):cpuinfo
  16. C#路径的八种相关操作,判断字符串是否为路径等
  17. 形象地理解Cookie和Session
  18. 如何遍历tabcontrol控件的所有的tabpage中的所有控件
  19. English: How to Pronounce R [ɹ] Consonant
  20. win10下nvidia控制面板看不到

热门文章

  1. BUUCTF-[强网杯2019]随便注
  2. 【KAWAKO】在windows上用CMake和MinGW编译c++工程
  3. CF1418D Trash Problem
  4. Centos7基础知识--------创建文件夹、彻底删除文件夹、文件命令
  5. PDO使用返回结果集的方法输出数据库里面的单个值
  6. vue还可以这样写
  7. Mbps 与 MBps
  8. 运维排查篇 | Linux 连接跟踪表满了怎么处理
  9. sqlite没法查出数据
  10. 【MySQL】导出到CSV