Mysql 合併結果接橫向拼接字段

2022-03-01 07:08:18 字數 2849 閱讀 6494

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

我的步驟是這樣先查出入職的人數關鍵sql如下:

select  dept ,count(1) rcnumber    from

員工表

where ( 入職時間 !=

''or 入職時間 is

notnull) and date_format(入職時間, '

%y-%m

')='

2019-09

'group

by部門id

order

by 部門名稱

查詢記錄

在查詢出離職的人數sql:

select  dept ,count(1) rcnumber    from

員工表

where ( 離職時間 !=

''or 離職時間 is

notnull) 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

notnull) 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

notnull) 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

notnull) and date_format(入職時間, '

%y-%m

')='

2019-09

'group

by部門id

order

by 部門名稱) a) c group

byc.dept

union

allselect 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

notnull) 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合併結果接橫向拼接欄位的實現步驟

近日在做乙個報表功能裡面有乙個這樣的需求是統計各部門在某一月入職和離職的人數 先查出入職的人數 select dept count 1 rcnumber from 員工表 where 入職時間 or 入職時間 is not null awww.cppcns.comnd 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...