Mysql合并结果接横向拼接字段的实现步骤

吾爱主题 阅读:139 2024-04-02 07:59:10 评论:0

前言

近日在做一个报表功能里面有一个这样的需求是统计各部门在某一月入职和离职的人数

我的步骤

先查出入职的人数

?
1 2 3 4 5 select dept , count (1) rcnumber from 员工表 where ( 入职时间 != ''    or 入职时间 is not null ) and date_format(入职时间, '%y-%m' )= '2019-09' group by 部门id order by 部门名称

查询记录

在查询出离职的人数sql:

?
1 2 3 4 5 select dept , count (1) rcnumber from 员工表 where ( 离职时间 != ''    or 离职时间 is not null ) and date_format(入职时间, '%y-%m' )= '2019-09' group by 部门id order by 部门名称

结果集

我想要的数据是这样的

我有了以下的尝试

1.我将两个查询结果看成两个表,使用了left join   不瞒您说数据格式是我想要的 但是想了想要是右表的记录比较多使用这个不就会少数据吗(right 同理)

2.我使用 union all  这个不是想要的数据 直接将两个结果相加竖向拼接

3.我使用了如同这种 select * from a,b  这个结果是笛卡尔积  两个表相乘的结果

以上方法的sql 就不贴出 意思应该明确了

我不信我就一直问百度 ,百度终于有了回答 我就尝试了一番

1.将入职sql处理如下

?
1 2 3 4 5 select a.dept,a.rcnumber,0 as lcnumber from ( select dept , count (1) rcnumber from 员工表 where ( 入职时间 != ''    or 入职时间 is not null ) and date_format(入职时间, '%y-%m' )= '2019-09' group by 部门id order by 部门名称) a

离职sql处理如下:

?
1 2 3 4 5 select a.dept,a.lcnumber,0 as rcnumber from ( select dept , count (1) rcnumber from 员工表 where ( 离职时间 != ''    or 离职时间 is not null ) and date_format(入职时间, '%y-%m' )= '2019-09' group by 部门id order by 部门名称) a

在外面包一层也可不包直接在原sql上加 我是为不破坏基本语句 这样当然不够

2.将两个语句进行竖向拼接合并联合sum 拼接

?
1 2 3 4 5 6 7 8 9 10 11 12 13 select dept , sum (cm_1) as rcnumber, sum (cm_0) as lcnumber from ( select c.id,c.dept, sum (c.lcnumber) as cm_0,c.rcnumber as cm_1 from ( select a.dept,a.rcnumber,0 as lcnumber from ( select dept , count (1) rcnumber from 员工表 where ( 入职时间 != ''    or 入职时间 is not null ) and date_format(入职时间, '%y-%m' )= '2019-09' group by 部门id order by 部门名称) a) c group by c.dept union all select d.id,d.dept,d.lcnumber as cm_0, sum (d.rcnumber) as cm_1 from ( select a.dept,a.lcnumber,0 as rcnumber from ( select dept , count (1) rcnumber from 员工表 where ( 离职时间 != ''    or 离职职时间 is not null ) and date_format(入职时间, '%y-%m' )= '2019-09' group by 部门id order by 部门名称) a) d group by d.dept) t group by t.dept order by t.id

最终就得到了我想要的结果

总结

到此这篇关于mysql合并结果接横向拼接字段的文章就介绍到这了,更多相关mysql合并结果接横向拼接字段内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://juejin.cn/post/6917513395981778958

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容