求201612某部门的上月结存(存休+特休)-本月请假+本月加班=本月结存

sinat_37247208 2017-01-04 12:40:20
一个说起来挺简单但是越快越头疼的一个项目,求懂的大神教一下,可能字数有些多。但是还是希望有大大求教一下!
求一个部门首先我要用总表里也就是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'

字有些多了,还是希望有大神帮帮忙,有强迫症又不是很会,特来请教。谢谢各位了。
...全文
291 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
POM_24 2017-01-06
  • 打赏
  • 举报
回复
with 
t1 as
--以下是员工信息统计表
 (select a.IDNO, a.EMPLNM, a.DEPTNM, a.EMPLNO, a.DEPTNO, a.DEPTID
    from pec.hrs110ma a
   inner join pec.hrs009m3 b
      on a.DEPTID = b.DEPTID
   where b.SUP_DEPTID = '00004199'
     and b.factno = '3300'
     and a.trnsid = '1'
     and b.stop_date is null) 
t2 as
--下面这个是员工的上月结存时数统计表
 (select /*+ordered*/
   a.IDNO, (a.QTY - b.TNUM + c.TNUM) as TNUM
    from (select t.IDNO, sum(t.QTY) as QTY
    from PEC.HRS390T0 t
   where t.SALARYID in ('3032', '3033')
   group by t.IDNO) a, PEC.HRS321T0 b, PEC.HRS351T0 c
   where a.IDNO = b.IDNO
     and b.IDNO = c.IDNO)
select t1.*, t2.TNUM from t1, t2 where t1.IDNO = t2.IDNO
我猜你是这种情况吧,至于YYYYMM(201612),FACTNO,trnsid 这个3个字段,猜不出从哪个表来了。
POM_24 2017-01-06
  • 打赏
  • 举报
回复
IDNO,EMPLNM,EMPLNO,DEPTID,DEPTNM,QTY,YYYYMM(201612),FACTNO,trnsid 这些个字段原来都是属于哪个表的,请说明。
sinat_37247208 2017-01-04
  • 打赏
  • 举报
回复
有人吗?大神们

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧