翼度科技»论坛 编程开发 mysql 查看内容

My SQL 列转行操作

8

主题

8

帖子

24

积分

新手上路

Rank: 1

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

 原表数据库查询代码:
  1. 1 SELECT
  2. 2     yzrq AS 运作日期,
  3. 3     DATE_FORMAT( yzrq, '%Y-%m' ) AS 年月,
  4. 4     rysl AS 日运输量,
  5. 5     jldw AS 计量单位,
  6. 6     cc AS 车次
  7. 7 FROM
  8. 8     uf_ysmxb
复制代码
原表查询结果:

目标:车次需要按月进行统计,相当于列转行
最终需要字段:年月、月度发货量、发货量类型
 
第一步:我们需要单独将车次数据提取出来
  1. SELECT
  2.         yzrq,
  3.         DATE_FORMAT( yzrq, '%Y-%m' ) AS 年月,
  4.         cc AS 日运输量,
  5.         '车次' AS 发货量类型
  6.     FROM
  7.         uf_ysmxb
复制代码

第二步:使用union all与其他的数据合并(到这里就已经实现了列转行的操作),注意,合并的两张表必须保证字段类型和名字一致
  1. SELECT        yzrq AS 运作日期,        DATE_FORMAT( yzrq, '%Y-%m' ) AS 年月,        rysl AS 日运输量,    CASE            jldw             WHEN 34 THEN            '重量' ELSE '体积'         END AS 发货量类型     FROM        uf_ysmxb [b]UNION ALL[/b]    SELECT
  2.         yzrq,
  3.         DATE_FORMAT( yzrq, '%Y-%m' ) AS 年月,
  4.         cc AS 日运输量,
  5.         '车次' AS 发货量类型
  6.     FROM
  7.         uf_ysmxb
复制代码

第三步:将数据按要求进行汇总统计
  1. 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
  2.         yzrq,
  3.         DATE_FORMAT( yzrq, '%Y-%m' ) AS 年月,
  4.         cc AS 日运输量,
  5.         '车次' AS 发货量类型
  6.     FROM
  7.         uf_ysmxb     ) AS T GROUP BY    年月,发货量类型
复制代码

 

来源:https://www.cnblogs.com/ykagile/p/18399903
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具