Oracle竖列转横列和MySQL竖列转横列

  • 一、前言
  • 二、Oracle实现
    • 基础表
    • 目标
    • 具体实现
  • 三、MySQL实现
    • 基础表
    • 目标
    • 具体实现
  • 四、参考

一、前言

做项目的时候遇到一个需要把表格某列数据提取出来变成折线图的需求,然后就想到了利用sql建立业务表或者业务视图的方法,来进行实现。
本方法只适用于指标项固定,且数量较少的情况下
——2021年4月19日更新
在Oracle库转入MySQL库时,转换语句不兼容,这次更新一下MySQL库的

二、Oracle实现

基础表

现在我们有一个基础表A
其中A的字段有ID,日期,贸易方式,金额,同比

目标

现在我们需要做的是提取出贸易方式里的:进出口,出口,进口为字段,而他们的数据为同比,以方便我们折线图的展示需要。

具体实现

接下来我们来看具体sql

select a.ID,a.日期,sum(b.同比),sum(c.同比),sum(d.同比)
FROM A a
LEFT JOIN (select ID,日期,同比 FROM A WHERE 贸易方式='进出口')b on a.日期=b.日期
LEFT JOIN (select ID,日期,同比 FROM A WHERE 贸易方式='出口')c on a.日期=c.日期
LEFT JOIN (select ID,日期,同比 FROM A WHERE 贸易方式='进口')d on a.日期=d.日期
GROUP BY a.ID,a.日期 ORDER BY a.ID,a.日期

这个方法只适合指标项固定,且数量较少的情况下,我们看一下查询结果

可以看到目前SUM(B)=进出口,SUM©=出口,SUM(D)=进口,但是细心的朋友可能发现,01,02,03数据是重复的,这是因为我们ID跟日期对应的指标项被提取出来了,但是原有ID跟日期还是那么多个,所以就会出现这种情况,为了避免出现这种情况,我们给SQL加一个Where条件筛选就可以了

select a.ID,a.日期,sum(b.同比) as"进出口",sum(c.同比) as "出口",sum(d.同比) as"进口"
FROM A a
LEFT JOIN (select ID,日期,同比 FROM A WHERE 贸易方式='进出口')b on a.日期=b.日期
LEFT JOIN (select ID,日期,同比 FROM A WHERE 贸易方式='出口')c on a.日期=c.日期
LEFT JOIN (select ID,日期,同比 FROM A WHERE 贸易方式='进口')d on a.日期=d.日期
WHERE a.ID='0701'
GROUP BY a.ID,a.日期 ORDER BY a.ID,a.日期


注:因为指标项已经被提取成横列,所以指标项ID可以舍弃不要,折线图也不需要展示ID

三、MySQL实现

基础表

现在我们有一个基础表B
其中B的字段有ID,日期,贸易方式,同比

目标

现在我们需要做的是提取出贸易方式里的:进出口,出口,进口为字段,而他们的数据为同比,以方便我们折线图的展示需要。

具体实现

接下来我们来看具体sql

select a.日期 as "SORT_FIELD",a.日期,sum(case when 贸易方式 ='进出口' then `同比(±%)` end)as 进出口,
sum(case when 贸易方式 ='出口' then `同比(±%)` end)as 出口,
sum(case when 贸易方式 ='进口' then `同比(±%)` end)as 进口
FROM JJYXTJ_JCKZHQK_YW a
GROUP BY a.日期;

注:因为指标项已经被提取成横列,所以指标项ID可以舍弃不要,折线图也不需要展示ID,这里为了排序需要将日期设置为了SORT_FIELD。

四、参考

参考语法地址

Oracle竖列转横列和MySQL竖列转横列相关推荐

  1. mysql 如何凭借几个列_我如何总结MySQL中的几个列

    在这种特殊情况下,使用WHERE会不会更容易? SELECT SUM(WTE) AS `Band6_WTE` FROM `orthoptists` AS o LEFT JOIN `instances` ...

  2. mysql列连接_连接来自MySQL中不同表的列

    您可以使用CONCAT().让我们首先创建一个表-mysql> create table DemoTable1 -> ( -> FirstName varchar(20) -> ...

  3. mysql里面取列里面值_在MySQL中获取特定的列值(名称)

    要获取特定的列值,请使用LIKE子句.让我们首先创建一个表-mysql> create table DemoTable1809 ( Name varchar(20) ); 使用插入命令在表中插入 ...

  4. mysql select 返回列,是否可以对在mysql SELECT语句中返回列的顺序进行排序?

    Imagine two questions from an online survey: Do you like apples? Result stored in mysql db column &q ...

  5. mysql 获取数据列号_如何获得mysql数据库的所有的列

    命令行下直接用:descrbe 表名 hive也是一样的. 用查询: SELECT  COLUMN_NAME FROM  `information_schema`.`COLUMNS` where  ` ...

  6. 关于MySQL表添加某一列和删除某一列

    前言:MySQL是一种广泛使用的关系型数据库管理系统,它是一种开源的软件,由瑞典的MySQL AB公司开发的. 文章目录: 添加MySQL表中某一列 删除MySQL表中某一列 一.添加MySQL表中某 ...

  7. 【Mysql如何纵列变横列】

    Mysql如何纵列变横列 写数据库遇到的一个问题 现在有供应商表supplier和供应商联系人表supplier_person,他们之间是一对多的关系 联系人表:中有两种类型"IN" ...

  8. mysql 列式存储_[转]几张图看懂列式存储

    最近看到一篇很好资料,里面三言两语配上几个图就把列式存储(Column-based Storage)讲明白了,牛啊!最喜欢的就是这种浅显易懂就把背景知识讲得明明白白,而不是长篇大论的讲概念. 1 为什 ...

  9. mysql单列索引和多列索引_mysql索引类型 normal, unique, full text

    问题1:mysql索引类型normal,unique,full text的区别是什么? normal:表示普通索引 unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用 ...

最新文章

  1. pythonjam的用法_jam的用法总结大全
  2. Core Dump流程分析
  3. 《剑指offer》-- 树的子结构、二叉树的镜像、二叉树的深度、平衡二叉树
  4. 网络体系架构—运输层协议概述
  5. 实现本网站图片保护功能之加水印
  6. Spring boot中最大连接数、最大线程数与最大等待数在生产中的异常场景
  7. 在用户离开页面(刷新、后退、关闭等)时提示信息
  8. 深入理解Scala的隐式转换
  9. 机器学习入门笔记(一):模型性能评价与选择
  10. create---创建表
  11. python运算符解释_Python运算符的详细介绍
  12. Runner站立会议03
  13. matlab在高等数学中的应用,Matlab在高等数学中的若干应用
  14. 2016专业版Excel PQ没有提取功能
  15. 02333软件工程_202010_试卷+答案
  16. retinex 的水下图像增强算法_Retinex图像增强算法
  17. 电脑长截屏工具 --- FastStone Capture 下载
  18. 苹果电脑怎么登录邮件服务器,Mac系统中的邮箱怎么创建126邮箱帐户?
  19. 【清晖诗社】“立秋” 诗意浓,佳作有奖征集ing!
  20. 银行的压力测试如何进行?

热门文章

  1. i511260h和i712700h差距大不大
  2. python为数组里的每一个元素加1的代码
  3. python赋值语句合法_关于Python赋值语句,以下选项中不合法的是()。
  4. 操作系统思维导图---(零基础---思维导图详细版本及知识点)
  5. python母婴用品电商平台django
  6. 2020数学1第一题详解
  7. 25个顶级PHP模板引擎
  8. <selectKey>标签详解
  9. 乐迪智能陪伴机器人_乐迪陪伴机器人 孩童在智能时代的新玩具
  10. python的getattr和setattr_getattr函数和setattr函数