Mysql合併結果接橫向拼接欄位的實現步驟

2022-09-24 14:09:10 字數 2151 閱讀 8319

近日在做乙個報表功能裡面有乙個這樣的需求是統計各部門在某一月入職和離職的人數

先查出入職的人數

select dept ,count(1) rcnumber from 員工表

where ( 入職時間 != ''

or 入職時間 is not null) awww.cppcns.comnd date_format(入職時間, '%y-%m')= '2019-09'

group by 部門id

order by 部門名稱

查詢記錄

在查詢出離職的人數sql:

select dept ,count(1) rcnumber from 員工表

wwww.cppcns.comhere ( 離職時間 != ''

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處理如下

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處理如下:

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 拼接

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 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 合併結果接橫向拼接字段

近日在做乙個報表功能裡面有乙個這樣的需求是統計各部門在某一月入職和離職的人數 我的步驟是這樣先查出入職的人數關鍵sql如下 select dept count 1 rcnumber from 員工表 where 入職時間 or 入職時間 is notnull and date format 入職時間...

Mysql合併查詢結果

本文通過例項介紹mysql中的group concat函式的使用方法,比如select group concat name mysql中group concat函式 完整的語法如下 group concat distinct 要連線的字段 order by asc desc 排序字段 separat...

Mysql游標查詢結果合併

drop procedure ifexists insert extra column delimiter create procedure insert extra column begin 定義判斷變數 declare flag varchar 50 定義查詢變數 declare cur cur...