当前位置:网站首页>数据中心表格报表实现定制统计加班请假汇总记录分享
数据中心表格报表实现定制统计加班请假汇总记录分享
2022-06-27 15:34:00 【51CTO】
输出效果:

业务需求:
1.根据加班记录、请假记录生成加班请假汇总表;
2.输出字段机关、科室、姓名、本年年假基数、剩余年假、本年补休假应修、本年补休假已休、盛与补休假、加班、休年假、休补休假、外出、事假、病假、婚假、产假、护理假、陪产假、计生假、探亲假、丧假、产检、育儿假、育儿假期、独生子女陪护假、学习假、家长会、因公、其他
3.天数为0.5的倍数;
4.各单位考勤管理员查询本单位数据。
需求分析:
- 达梦数据库。
- 请假数据拆分表
select id,requestid,resourceid,subcompanyid,departmentid,fromdate,newleavetype,duration from kq_flow_split_leave
- 加班数据拆分表
select id,requestid,resourceid,subcompanyid,departmentid,fromdate,duration from kq_flow_split_overtime
- 假期余额数据
select id,resourceId,leaveRulesId,belongYear,baseAmount,usedAmount,extraAmount,effectiveDate,overtimeType,belongMonth from kq_balanceOfLeave
- 假期类型数据
select * from KQ_LeaveRules
- 关于0.5的倍数算法
FLOOR(round(duration,1)*2)/2
- 关于调休假失效判断
CASE WHEN EXPIRATIONDATE<CURDATE()
输出记录:
请假与加班SQL输出:
- 加班记录
select
id,
requestid ,
resourceid ,
subcompanyid ,
departmentid ,
fromdate ,
FLOOR(round(duration, 1)*2)/2 as duration
from
kq_flow_split_overtime
- 请假记录
select
id ,
requestid ,
resourceid ,
subcompanyid,
departmentid,
fromdate ,
newleavetype,
FLOOR(round(duration, 1)*2)/2 as duration
from
kq_flow_split_leave
- 加班请假拼接拼接前统一字段:
(1)ID错开(2)加班增加类型字段。
select
id ,
requestid ,
resourceid ,
subcompanyid,
departmentid,
fromdate ,
newleavetype,
FLOOR(round(duration, 1)*2)/2 as duration
from
kq_flow_split_leave
union all
select
90000000000000000000000+id,
requestid ,
resourceid ,
subcompanyid ,
departmentid ,
fromdate ,
99 as newleavetype ,
FLOOR(round(duration, 1)*2)/2 as duration
from
kq_flow_split_overtime
- 类型数据竖排转横排
select
t.id ,
t.requestid ,
t.resourceid ,
t.subcompanyid ,
t.departmentid ,
t.fromdate ,
case t.newleavetype when 2 then t.duration else 0 end AS newleavetype2 ,
case t.newleavetype when 3 then t.duration else 0 end AS newleavetype3 ,
case t.newleavetype when 4 then t.duration else 0 end AS newleavetype4 ,
case t.newleavetype when 5 then t.duration else 0 end AS newleavetype5 ,
case t.newleavetype when 6 then t.duration else 0 end AS newleavetype6 ,
case t.newleavetype when 7 then t.duration else 0 end AS newleavetype7 ,
case t.newleavetype when 8 then t.duration else 0 end AS newleavetype8 ,
case t.newleavetype when 9 then t.duration else 0 end AS newleavetype9 ,
case t.newleavetype when 10 then t.duration else 0 end AS newleavetype10,
case t.newleavetype when 11 then t.duration else 0 end AS newleavetype11,
case t.newleavetype when 12 then t.duration else 0 end AS newleavetype12,
case t.newleavetype when 13 then t.duration else 0 end AS newleavetype13,
case t.newleavetype when 14 then t.duration else 0 end AS newleavetype14,
case t.newleavetype when 15 then t.duration else 0 end AS newleavetype15,
case t.newleavetype when 16 then t.duration else 0 end AS newleavetype16,
case t.newleavetype when 17 then t.duration else 0 end AS newleavetype17,
case t.newleavetype when 18 then t.duration else 0 end AS newleavetype18,
case t.newleavetype when 19 then t.duration else 0 end AS newleavetype19,
case t.newleavetype when 20 then t.duration else 0 end AS newleavetype20,
case t.newleavetype when 21 then t.duration else 0 end AS newleavetype21,
case t.newleavetype when 22 then t.duration else 0 end AS newleavetype22,
case t.newleavetype when 99 then t.duration else 0 end AS newleavetype99
from
(
select
id ,
requestid ,
resourceid ,
subcompanyid,
departmentid,
fromdate ,
newleavetype,
FLOOR(round(duration, 1)*2)/2 as duration
from
kq_flow_split_leave
union all
select
90000000000000000000000+id,
requestid ,
resourceid ,
subcompanyid ,
departmentid ,
fromdate ,
99 as newleavetype ,
FLOOR(round(duration, 1)*2)/2 as duration
from
kq_flow_split_overtime
)
t
- 请假与加班创建视图
CREATE OR REPLACE VIEW VIEW_KQ_XTQINGJIAJIABANHUIZONG AS
- 查询测试
select * from VIEW_KQ_XTQINGJIAJIABANHUIZONG

本年假期余额SQL输出:
- 本年年假
select
resourceId ,
sum(nvl(baseAmount, 0)+nvl(extraAmount, 0)) as nj ,
sum(nvl(usedAmount, 0)) as njyx,
sum(nvl(baseAmount, 0) +nvl(extraAmount, 0)-nvl(usedAmount, 0)) as njye
from
kq_balanceOfLeave
where
leaveRulesId = 2
and belongYear =to_char(YEAR(CURDATE()))
and
(
ISDELETE is null
or ISDELETE =0
)
group by
resourceId
- 本年调休假
select
resourceId ,
sum(nvl(TIAOXIUAMOUNT, 0)) as jb ,
sum(nvl(extraAmount, 0)) as ew ,
sum(nvl(TIAOXIUAMOUNT, 0)+nvl(baseAmount, 0)+nvl(extraAmount, 0)) as tx ,
sum(nvl(usedAmount, 0)) as txyx,
sum(CASE WHEN EXPIRATIONDATE<CURDATE() THEN nvl(TIAOXIUAMOUNT, 0) +nvl(baseAmount, 0)+nvl(extraAmount, 0)-nvl(usedAmount, 0) ELSE 0 END ) as sxye,
sum(CASE WHEN EXPIRATIONDATE<CURDATE() THEN 0 ELSE nvl(TIAOXIUAMOUNT, 0)+nvl(baseAmount, 0)+nvl(extraAmount, 0)-nvl(usedAmount, 0) END) as txye
from
kq_balanceOfLeave
where
leaveRulesId = 5
and belongYear =to_char(YEAR(CURDATE()))
and
(
ISDELETE is null
or ISDELETE =0
)
group by
resourceId

人员基本信息SQL输出
- 人员基本信息
select
hh.id,
hh.departmentid ,
hh.subcompanyid1 ,
hh.workstartdate
from
hrmresource hh
where
hh.accounttype =0
and hh.status <4
- 增加组织排序
select
hh.id,
trunc(10000 +s.showorder, 0)
||trunc(10000+d.showorder, 0)
||trunc(10000+hh.dsporder, 0) as showorder,
hh.departmentid ,
hh.subcompanyid1 ,
hh.workstartdate
from
hrmresource hh ,
hrmdepartment d,
hrmsubcompany s
where
hh.accounttype =0
and hh.status <4
and hh.departmentid =d.id
and hh.subcompanyid1=s.id

查询结果SQL拼接
- 人员基本信息+年假余额+调休余额+请假加班
select
h.id as resourceid,
h.showorder ,
h.id
||'-'
||v.id as id ,
h.departmentid ,
h.subcompanyid1 ,
h.workstartdate ,
n.nj ,
n.njyx ,
n.njye ,
t.jb ,
t.ew ,
t.tx ,
t.txyx ,
t.sxye ,
t.txye ,
v.fromdate ,
v.newleavetype2 ,
v.newleavetype3 ,
v.newleavetype4 ,
v.newleavetype5 ,
v.newleavetype6 ,
v.newleavetype7 ,
v.newleavetype8 ,
v.newleavetype9 ,
v.newleavetype10,
v.newleavetype11,
v.newleavetype12,
v.newleavetype13,
v.newleavetype14,
v.newleavetype15,
v.newleavetype16,
v.newleavetype17,
v.newleavetype18,
v.newleavetype19,
v.newleavetype20,
v.newleavetype21,
v.newleavetype22,
v. newleavetype99
from
(
select
hh.id,
trunc(10000 +s.showorder, 0)
||trunc(10000+d.showorder, 0)
||trunc(10000+hh.dsporder, 0) as showorder,
hh.departmentid ,
hh.subcompanyid1 ,
hh.workstartdate
from
hrmresource hh ,
hrmdepartment d,
hrmsubcompany s
where
hh.accounttype =0
and hh.status <4
and hh.departmentid =d.id
and hh.subcompanyid1=s.id
)
h
left join
(
select
resourceId ,
sum(nvl(baseAmount, 0)+nvl(extraAmount, 0)) as nj ,
sum(nvl(usedAmount, 0)) as njyx,
sum(nvl(baseAmount, 0) +nvl(extraAmount, 0)-nvl(usedAmount, 0)) as njye
from
kq_balanceOfLeave
where
leaveRulesId = 2
and belongYear =to_char(YEAR(CURDATE()))
and
(
ISDELETE is null
or ISDELETE =0
)
group by
resourceId
)
n
on
h.id=n.resourceId
left join
(
select
resourceId ,
sum(nvl(TIAOXIUAMOUNT, 0)) as jb ,
sum(nvl(extraAmount, 0)) as ew ,
sum(nvl(TIAOXIUAMOUNT, 0)+nvl(baseAmount, 0)+nvl(extraAmount, 0)) as tx ,
sum(nvl(usedAmount, 0)) as txyx,
sum(CASE WHEN EXPIRATIONDATE<CURDATE() THEN nvl(TIAOXIUAMOUNT, 0) +nvl(baseAmount, 0)+nvl(extraAmount, 0)-nvl(usedAmount, 0) ELSE 0 END ) as sxye,
sum(CASE WHEN EXPIRATIONDATE<CURDATE() THEN 0 ELSE nvl(TIAOXIUAMOUNT, 0)+nvl(baseAmount, 0)+nvl(extraAmount, 0)-nvl(usedAmount, 0) END) as txye
from
kq_balanceOfLeave
where
leaveRulesId = 5
and belongYear =to_char(YEAR(CURDATE()))
and
(
ISDELETE is null
or ISDELETE =0
)
group by
resourceId
)
t
on
h.id=t.resourceId
left join view_kq_xtqingjiajiabanhuizong v
on
h.id=v.resourceId
- 创建视图
CREATE OR REPLACE VIEW VIEW_KQ_XTNIANJIATIAOXIU AS
- 查询测试
select * from VIEW_KQ_XTNIANJIATIAOXIU

报表设计
- 添加数据集合

直接把视图加到数据集合。
- 设置过滤条件

实现查询本单位数据。
- 报表设计字段-姓名

设置左父格为默认(A列)、纵向扩展、分组。
转换为人力资源浏览按钮显示。
A列为排序字段,纵向、分组、升序。
A列是辅助列,隐藏列。
- 报表设计字段-机关、科室、参加工作时间

设置姓名列为左父格、设置不扩展、分组
转换对应设置机关、科室、日期浏览按钮。
- 本年假期余额

设置姓名列为左父格、不扩展、汇总、最大值。
- 统计请假加班

设置姓名列为左父格、不扩展、汇总、求和。
附TIPS:
关于类型竖排转横排SQL输出技巧
- 获取所有假期类型

- 导出到Excel表,公式拼接
="case t.newleavetype when "&A2&" then t.duration else 0 end AS newleavetype"&A2&","
- 复制到SQL语句

边栏推荐
- Problems encountered in vs compilation
- 请问阿里云实验中 k8s 对于3306端口转发,同时开启mysql客户端就会异常终止,是什么原因呢?
- NFT dual currency pledge liquidity mining DAPP contract customization
- Hongmeng makes efforts! HDD Hangzhou station · offline salon invites you to build ecology
- Regular matching starts with what, ends with what, starts with what, and ends with what
- Domain name binding dynamic IP best practices
- 【kotlin】第二天
- SQL injection principle
- [kotlin] the next day
- [pyGame games] this "eat everything" game is really wonderful? Eat them all? (with source code for free)
猜你喜欢

基于 Nebula Graph 构建百亿关系知识图谱实践

PSS: you are only two convolution layers away from the NMS free+ point | 2021 paper
![Luogu_ P1003 [noip2011 improvement group] carpet laying_ Violence enumeration](/img/65/413ac967cc8fc22f170c8c7ddaa106.png)
Luogu_ P1003 [noip2011 improvement group] carpet laying_ Violence enumeration

洛谷入门2【分支结构】题单题解

事务的四大特性

substrate 技术每周速览 20220411
The role of the symbol @ in MySQL

#28对象方法扩展

PSS: vous n'êtes qu'à deux niveaux du NMS Free + Lifting point | 2021 Paper

ICML 2022 ぷ the latest fedformer of the Dharma Institute of Afghanistan ⻓ surpasses SOTA in the whole process of time series prediction
随机推荐
Weekly snapshot of substrate technology 20220411
关于快速幂
The array of C language is a parameter to pass a pointer
【kotlin】第二天
关于TensorFlow使用GPU加速
Bit.Store:熊市漫漫,稳定Staking产品或成主旋律
字节跳动埋点数据流建设与治理实践
Can polardb-x be accessed through the client of related tools as long as the client supporting JDBC / ODBC protocol is afraid?
手机号码的格式
洛谷_P1008 [NOIP1998 普及组] 三连击_枚举
Pisa-Proxy 之 SQL 解析实践
ICML 2022 | 阿⾥达摩院最新FEDformer,⻓程时序预测全⾯超越SOTA
E modulenotfounderror: no module named 'psychopg2' (resolved)
What should the ultimate LAN transmission experience be like
Format of mobile number
Gin general logging Middleware
Cesium uses mediastreamrecorder or mediarecorder to record screen and download video, as well as turn on camera recording. [transfer]
PSS:你距離NMS-free+提點只有兩個卷積層 | 2021論文
New method of cross domain image measurement style relevance: paper interpretation and code practice
#28对象方法扩展