求201612某部门的上月结存(存休+特休)-本月请假+本月加班=本月结存
一个说起来挺简单但是越快越头疼的一个项目,求懂的大神教一下,可能字数有些多。但是还是希望有大大求教一下!
求一个部门首先我要用总表里也就是hrs110ma里把部门人数提取出来,通过部门对应上级部门表也就是hrs009m3。通过表关联外加一些部门所属条件从而获得部门具体人数和信息,也就是下列语句
PS:hrs110ma人员信息总表
hrs009m3部门对应上级部门表
hrs390t0员工月度考勤总档(查询2个假别,salaryid为3032上月存休和3033上月特休在一张表内同个字段里部分要相加)
hrs351t0加班表(内含TRUM,也就是加班时数)
hrs321t0请假表(同上,内含TRUM字段,也就是请假时数)
大概的意思就是,某部门每个人hrs390t0的上月结存时数(salaryid字段下为3032和3033的字段的QTY的值,相加所得的新的QTY)-hrs351t0的加班时数(TRUM字段)+hrs321t0的请假时数(TRUM字段)=本月结存。成为新的QTY字段即可。最后查询结果只要显示IDNO,EMPLNM,EMPLNO,DEPTID,DEPTNM,QTY,YYYYMM(201612),FACTNO,trnsid
select *
from pec.hrs110ma
inner join pec.hrs009m3 on pec.hrs110ma.DEPTID = pec.hrs009m3.DEPTID--几个表中的DEPTID部门ID是一样的,还有IDNO身份证号,EMPLNM员工姓名,EMPLNO员工编号,DEPTNM部门名称
where SUP_DEPTID = '00004199'--SUP_DEPTID是上级部门代号连接HRS009M3
and pec.hrs110ma.factno = '3300'--factno是厂别
and trnsid = '1';--trnsid代表是否在职
select IDNO, EMPLNM, DEPTNM, EMPLNO, DEPTNO, DEPTID
from pec.hrs110ma
where stop_date is null
and trnsid = 1
and deptid in (select deptid
from pec.hrs009m3
where SUP_DEPTNO = '01040000'
and factno = '3300'
and stop_date is null)--这段语句和上一段效果是一样的,stop_date is null和trnsid =1也是一样的道理。
之后我就懵逼了。子关联没有用,不会把人员导到hrs390t0,下面这个语句是我写的,但是感觉很不对。。。因为不会把上面的信息导进去还有就是3033和3032没有相加。这段应该是错的,我就发下希望不要误导各位大神。
select (pec.hrs390t0.QTY - pec.hrs321t0.TNUM + pec.hrs351t0.TNUM) as TNUM
from PEC.HRS390T0, PEC.HRS321T0, PEC.HRS351T0
where PEC.HRS390T0.QTY = PEC.HRS321T0.TNUM
and PEC.HRS351T0.TNUM = PEC.HRS321T0.TNUM
and pec.hrs390T0.SALARYID='3032'
字有些多了,还是希望有大神帮帮忙,有强迫症又不是很会,特来请教。谢谢各位了。