表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 物理

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

sql 行转列分析 以后再也不用记了的更多相关文章

  1. SQL行转列 (及EAV模型获取数据)

    参考文章: http://www.williamsang.com/archives/1508.html 情景简介 学校里面记录成绩,每个人的选课不一样,而且以后会添加课程,所以不需要把所有课程当作列. ...

  2. SQL行转列,列转行

    SQL 行转列,列转行 行列转换在做报表分析时还是经常会遇到的,今天就说一下如何实现行列转换吧. 行列转换就是如下图所示两种展示形式的互相转换 行转列 假如我们有下表: SELECT * FROM s ...

  3. SQL 行转列和列转行

    SQL 行转列和列转行 行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过 ...

  4. Ms sql行转列。汇总

    SQL行转列汇总 PIVOT 用于将列值旋转为列名(即行转列),在 SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT 的一般语法是:PIVOT(聚合函数(列) FOR 列 ...

  5. sql 行专列 列转行 普通行列转换

    转载:http://www.cnblogs.com/newwind521/archive/2010/11/25/1887203.html sql 行专列 列转行 普通行列转换 /* 标题:普通行列转换 ...

  6. sql 行转列 PIVOT 列转行 UNPIVOT

    原文:sql 行转列 PIVOT 列转行 UNPIVOT 一: 现有表一(t_table1),想转为表二(t_table2)的格式. 表一: 年 公司 收入 2013 公司1 12 2013 公司2 ...

  7. sql 行转列总结

    原文:sql 行转列总结 PIVOT UNPIVOT的用法 PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PI ...

  8. sql 行转 列, 列转行

    行列互转 复制代码 create table test(id ),quarter int,profile int) insert into test values(,,) insert into te ...

  9. SQL行转列和列转行

    行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性的认识和 ...

  10. Sql 行转列问题总结

    行转列问题总结 1.行转列 ---1.最简单的行转列/* 问题:假设有张学生成绩表(tb)如下:姓名 课程 分数张三 语文 74张三 数学 83张三 物理 93李四 语文 74李四 数学 84李四 物 ...

随机推荐

  1. day07-MyBatis的关联映射01

    MyBatis的关联映射 Mybatis的关联映射 实际的开发中,对数据库的操作常常会涉及到多张表,这在面向对象中就涉及到了对象与对象之间的关联关系.针对多表之间的操作,MyBatis提供了关联映射, ...

  2. 添加weui-miniprogram

    1.打开根目录 npm init npm install weui-miniprogram --save 2.打开project.config.json 设置 "packNpmManuall ...

  3. LeetCode-432 全O(1)的数据结构

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/all-oone-data-structure 题目描述 请你设计一个用于存储字符串计数的数据结构 ...

  4. MTU设置不当导致ssh运行命令卡死

    MTU:最大网络传输单元,计算机网络课会介绍. 场景: 本地通过VPN连接某个机房内网的linux服务器,连接上之后,运行top命令.vi命令.yum update等需要刷新大量内容时导致ssh卡死, ...

  5. 简述traceroute命令的原理

    原理 traceroute命令是一种用于显示数据包从源主机到目的主机经过的路由器和网络设备的路径的工具.traceroute命令的原理是利用IP数据报的生存时间(TTL)字段和因特网控制报文协议(IC ...

  6. 解决用flex布局时内容溢出的问题

    1,2正常现象如下: 2,点击折叠图标 再点折叠 无图标了 解决:flex:1,width:0 就可以了

  7. Solution Set - NOIP2022

    种花 枚举 C 或者 F 最左边的那一竖,考虑对于每一个这一竖上的全 \(0\) 区间 \([l,r]\) 求答案. 记每个点向右延伸最多延伸到 \(L_{i,j}\),对于 C 的情况,枚举列 \( ...

  8. HttpClient Post 提交表单数据

    运行环境 .net 4.6.1 //为防止因HTTPS证书认证失败造成API调用失败,需要先忽略证书信任问题 var sslHandler = new HttpClientHandler() { }; ...

  9. 淘宝sign算法和使用教程

    前言 最新写的淘宝热卖插件系列里面有涉及到淘宝sign算法加密,这里博主分享一下之前找到算法和修改后的算法以及使用教程.在此希望能帮助更多的人,欢迎各位加入我的交流Q群:468458543,群内不定时 ...

  10. tcl编程

    目录 0. 基础语法 0.1 普通变量 0.2 list, 列表 0.3 array, 数组 0.4 循环 0.4.1 for 0.4.2 foreach 1. 从命令行获取参数(好像并不是很强大) ...