首页 > 数据库 >My SQL 列转行操作

My SQL 列转行操作

时间:2024-09-06 11:26:00浏览次数:8  
标签:运输量 转行 发货量 车次 yzrq SQL DATE My SELECT

原表结构如下,我们可以发现,“日运输量”和“车次”是在同一张表中相互独立的两个字段,即独立的两列数据,下面,我将系统中的测试数据以及代码全部放出来,以解释列转行的操作方法

 原表数据库查询代码:

1 SELECT
2     yzrq AS 运作日期,
3     DATE_FORMAT( yzrq, '%Y-%m' ) AS 年月,
4     rysl AS 日运输量,
5     jldw AS 计量单位,
6     cc AS 车次 
7 FROM
8     uf_ysmxb

原表查询结果:

目标:车次需要按月进行统计,相当于列转行

最终需要字段:年月、月度发货量、发货量类型

 

第一步:我们需要单独将车次数据提取出来

SELECT
        yzrq,
        DATE_FORMAT( yzrq, '%Y-%m' ) AS 年月,
        cc AS 日运输量,
        '车次' AS 发货量类型 
    FROM
        uf_ysmxb 

第二步:使用union all与其他的数据合并(到这里就已经实现了列转行的操作),注意,合并的两张表必须保证字段类型和名字一致

SELECT
        yzrq AS 运作日期,
        DATE_FORMAT( yzrq, '%Y-%m' ) AS 年月,
        rysl AS 日运输量,
    CASE
            jldw 
            WHEN 34 THEN
            '重量' ELSE '体积' 
        END AS 发货量类型 
    FROM
        uf_ysmxb UNION ALL
    SELECT
        yzrq,
        DATE_FORMAT( yzrq, '%Y-%m' ) AS 年月,
        cc AS 日运输量,
        '车次' AS 发货量类型 
    FROM
        uf_ysmxb 

第三步:将数据按要求进行汇总统计

SELECT
    年月,
    SUM(日运输量) AS 月度发货量,发货量类型 
FROM
    (
    SELECT
        yzrq AS 运作日期,
        DATE_FORMAT( yzrq, '%Y-%m' ) AS 年月,
        rysl AS 日运输量,
    CASE
            jldw 
            WHEN 34 THEN
            '重量' ELSE '体积' 
        END AS 发货量类型 
    FROM
        uf_ysmxb UNION ALL
    SELECT
        yzrq,
        DATE_FORMAT( yzrq, '%Y-%m' ) AS 年月,
        cc AS 日运输量,
        '车次' AS 发货量类型 
    FROM
        uf_ysmxb 
    ) AS T 
GROUP BY
    年月,发货量类型

 

标签:运输量,转行,发货量,车次,yzrq,SQL,DATE,My,SELECT
From: https://www.cnblogs.com/ykagile/p/18399903

相关文章

  • 【mybtis】使用mybtis新增或更新空值问题
    当使用#{}传递参数时,如果column1参数是null,mybatis会报错。<updateid="updateUser"parameterType="User">UPDATEuser_tableSETcolumn1=#{column1},column2=#{column2},column3=NULLWHEREid=#{id}</update>......
  • Mysql多实例安装
    MySQL多实例的本质在一台机器上开启多个不同的MySQL实例,也就是各实例监听不同的端口,提供不同的服务。多个实例公用一套MySQL安装程序,启动程序和配置文件可以是一个也可以是多个(推荐多个);各自的数据文件隔离;逻辑上各实例彼此隔离。为什么要使用多实例?优缺点?物理机性能强大,单个......
  • Docker 安装mysql
    1、从docker hub上拉取镜像到本地#dockerpullmysql:5.62.如果是不加版本直接拉取的话,默认的是最新版本 #dockerpullmysql:latest默认拉取最新的版本3.启动:#dockerrun--namemysql-p3306:3306-eMYSQL_ROOT_PASSWORD="设置你的mysql的密码"-dmysql:5.6......
  • 安装Mysql
    1.下载Mysql打开官网下载地址:https://downloads.mysql.com/archives/community/,按照截图所示下载即可。选择对应的操作系统Windows安装 1.下载到本地的安装包是zip包,选择一个指定目录进行解压,解压的过程就是安装的过程,解压后的位置就是MySQL的安装位置。注意,安装目录不允许......
  • 小皮出现80端口被System占用以及Mysql服务无法启动的解决方法
    80端口被System占用的解决方法80端口一般被当做网页服务器的默认端口,使用本机搭建服务器环境的时候,都会默认使用80端口来作为网页访问端,但是有的时候80端口会被其他程序占用,导致Apache启动失败。下面介绍一下如果80端口被占用后应该如何处理。经过查询,发现占用80端口的确是......
  • mysql索引优化
      1.联合索引,注意最左匹配原则:必须按照从左到右的顺序匹配,MySQL会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a=1andb=2andc>3andd=4如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意......
  • 美团面试:mysql 索引失效?怎么解决? (重点知识,建议收藏,读10遍+)
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • mysql分库表实现大宽表逻辑-canal/es
    大宽表落地背景mysql分库分表后,很多页面查询操作不走分片键,会导致数据库压力很大,查询效率极低的问题场景设计:设计一张索引表,以下叫大宽表,将需要查询的业务字段放到一张表解耦业务逻辑,业务不需主动维护此表利用canal-admin/canal-developer/canal-adatper+rocketMq......
  • Python使用MySQL数据库
    安装MySQL-python要想使python可以操作mysql 就需要MySQL-python驱动,它是python 操作mysql必不可少的模块。下载地址:https://pypi.python.org/pypi/MySQL-python/下载MySQL-python-1.2.5.zip 文件之后直接解压。进入MySQL-python-1.2.5目录:>>python setup.py install ......
  • Mysql高级篇(上)—— Mysql架构介绍(二)
    Mysql高级篇(上)MySQL架构介绍(二)逻辑架构逻辑架构剖析MySQL8.0中SQL执行流程Linux环境下MySQL8.0中SQL执行原理MySQL语法顺序Oracle中SQL执行流程(了解)数据库缓存池bufferpool(了解)存储引擎常见存储引擎简述InnoDB和MyISAM两种存储引擎的特点对比MySQL架构介绍(二)......