近日在做乙個報表功能裡面有乙個這樣的需求是統計各部門在某一月入職和離職的人數
我的步驟是這樣先查出入職的人數關鍵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離職sql處理如下: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
select a.dept,a.lcnumber,0在外麵包一層也可不包直接在原sql上加 我是為不破壞基本語句 這樣當然不夠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
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...