文章目录

  • 天天这需求就神奇!!!!
  • SQL中怎么将行转成列?
    • 1. 使用 CASE...WHEN...THEN 语句实现行转列,参考如下代码:
    • 2. 使用 IF() 函数实现行转列,参考如下代码:

天天这需求就神奇!!!!

SQL中怎么将行转成列?

我们以MySQL数据库为例,来说明行转列的实现方式。
首先,假设我们有一张分数表(tb_score),表中的数据如下图:


然后,我们再来看一下转换之后需要得到的结果,如下图:


可以看出,这里行转列是将原来的subject字段的多行内容选出来,作为结果集中的不同列,并根据userid进行分组显示对应的score。通常,我们有两种方式来实现这种转换。

1. 使用 CASE…WHEN…THEN 语句实现行转列,参考如下代码:

SELECT userid,
SUM(CASE `subject` WHEN '语文' THEN score ELSE 0 END) as '语文',
SUM(CASE `subject` WHEN '数学' THEN score ELSE 0 END) as '数学',
SUM(CASE `subject` WHEN '英语' THEN score ELSE 0 END) as '英语',
SUM(CASE `subject` WHEN '政治' THEN score ELSE 0 END) as '政治'
FROM tb_score
GROUP BY userid

注意,SUM() 是为了能够使用GROUP BY根据userid进行分组,因为每一个userid对应的
subject="语文"的记录只有一条,所以SUM() 的值就等于对应那一条记录的score的值。假如userid ='001' and subject='语文' 的记录有两条,则此时SUM() 的值将会是这两条记录的和,同理,使用Max()的值将会是这两条记录里面值最大的一个。但是正常情况下,一个user对应一个subject只有一个分数,因此可以使用SUM()、MAX()、MIN()、AVG()等聚合函数都可以达到行转列的效果。

2. 使用 IF() 函数实现行转列,参考如下代码:

SELECT userid,
SUM(IF(`subject`='语文',score,0)) as '语文',
SUM(IF(`subject`='数学',score,0)) as '数学',
SUM(IF(`subject`='英语',score,0)) as '英语',
SUM(IF(`subject`='政治',score,0)) as '政治'
FROM tb_score
GROUP BY userid

注意, IF(subject='语文',score,0) 作为条件,即对所有subject='语文’的记录的score字段进行SUM()、MAX()、MIN()、AVG()操作,如果score没有值则默认为0。

SQL中怎么将行转成列?相关推荐

  1. Vue中el-table追加行后固定列滚动错位问题

    Vue中el-table追加行后固定列滚动错位问题 一.问题描述 偶然发现一个问题,但是并没有找到解决方案,自己调试了两个多小时终于解决. 先贴出问题 业务描述:在已查询完全部的符合条件的数据后,表格 ...

  2. Java黑皮书课后题第8章:**8.4(计算每个雇员每周工作的小时数)假定所有雇员每周工作的小时数存储在一个二维数组中。1行包含7列,记录了一个雇员7天的工作小时数。编写一个程序,按照总工时降序显示

    **8.4(计算每个雇员每周工作的小时数)假定所有雇员每周工作的小时数存储在一个二维数组中.1行包含7列,记录了一个雇员7天的工作小时数.编写一个程序,按照总工时降序显示 题目 题目描述 破题 代码 ...

  3. SQL中合并多行记录的方法总汇

    SQL中合并多行记录的方法总汇 --前几天还在抱怨:sql只有sum(数值),不能sum(字符串) --如果不是分组统计,用select @values = @values + ',' + value ...

  4. mysql将行显示成列_mysql – 在表中将行显示为列

    我有一张像下面这样的表 CREATE TABLE Statistics(Stat_Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, Period VARCHAR( ...

  5. oracle 动态行转成列,Oracle 行转列 动态出转换的列

    一.运行环境 Win10,Oracle Database 11g r2,plsql 12. 二.效果预览 1.固定转换列的方法 2.存储过程处理 1)调用存储过程 2)查指定的视图即可 3.两种方法的 ...

  6. python每行乘列表_python – 在pandas数据帧中查找每行的两列列表中哪一列的最快方法...

    我正在寻找最快的方法来做到以下几点: 我们有一个pd.DataFrame: df = pd.DataFrame({ 'High': [1.3,1.2,1.1], 'Low': [1.3,1.2,1.1 ...

  7. OpenCV中 Mat 按行或按列合并程序

    按行合并 #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespa ...

  8. numpy中array的行数和列数

    import numpy as np x = np.array([[1,2,5],[2,3,5],[3,4,5],[2,3,6]]) # 输出数组的行和列数 print(x.shape) # (4, ...

  9. mysql行转列sql函数_SQL 将行转化为列实现列的动态更新

    现有数据表: codenames type  flag zhao   a      y zhao   b      n zhao   c       y li     a      n li     ...

最新文章

  1. python实现yolo目标检测_从零开始PyTorch项目:YOLO v3目标检测实现
  2. C#3.0笔记(五)Lambda表达式
  3. python资料书-关于 Python 的经典入门书籍有哪些?
  4. 一文看懂软件测试方法和规范
  5. matlab for 取数组,for循环中的MATLAB和单元格数组处理
  6. Log4j2突发重大漏洞
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的客户关系管理系统
  8. 美元指数DXY短线走高10逾点,现报90.77
  9. Android传感器模拟器,如何为Android构建传感器模拟器?
  10. newton版本linux,centos7.4下安装部署openstack newton版本 互联网技术圈 互联网技术圈...
  11. delphi 获取打印机默认纸张_如何设置一台打印机打印不同尺寸的纸张
  12. 小明利用计算机软件绘制函数,辽宁省大连市2014年高二学业水平模拟考试 信息技术试题(三)...
  13. 软Raid5,LVM,3T大硬盘纠缠操作的问题
  14. 百度网盘资源转迅雷下载正确打开方式!
  15. java怎么解析json_基于java解析JSON的三种方式详解
  16. Seafile搭建以及onlyoffice在线办公
  17. 全志定制编译Android,全志H3 Android定制化文档
  18. 参考《机器学习实战》高清中文PDF+高清英文PDF+源代码
  19. qt 截图 视频 截屏幕 截窗口
  20. 解决Word文档中表格不会自动换页,而是在同一页word上往下换行的问题。

热门文章

  1. Python教程:字典的setdefault() 和get()方法比较
  2. AutoML 详解及其在推荐系统中的应用、优缺点
  3. 求三个数最大公约数算法
  4. 边缘检测--轮廓提取--透视变换实战
  5. 五层协议的体系结构概述
  6. CSS盒子模型居中方法,限时删除
  7. 三星android棒棒糖系统,三星Galaxy S5/S4吃上原生安卓5.0棒棒糖
  8. 2. 支付方式(Payment Methods)
  9. hexo添加评论功能
  10. String 在Java中的用法详解