SQL数据库求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'

字有些多了,还是希望有大神帮帮忙,有强迫症又不是很会,特来请教。谢谢各位了。

你先指定某一个人的,你这一片的看的眼都花了。
SQL语句写成这样的
select * from 表 A,
表 B,
表 C
where A.XX = B.XX
AND B.XX = C.XX --表关联字段和要求自己加
AND A.XX = '特指的对象'; --处理好以后把这个特定的条件注释即可
先看一下查到的这一行记录是不是你要的,在做列的选择和运算处理。追问

如果指定这一群人呢。大概20个人左右,表关联我会做,就是列运算感觉有些问题。方便留个微信吗?大哥。

追答

指定一群人你就把 AND A.XX = '特指的对象' 这个特指的对象用SQL语句替换掉 A.XX in (select XXX from XXX)

追问

用子关联吗?还是麻烦大哥留个联系方式吧

追答

你先找一个人的,把需要的列全显示出来, 通过关联(先不要计算),只显示原始数据。我手机落后N代了,微信就别考虑了。

追问

那QQ也行啊。表关联我可以操作的。

追答

select a.IDNO, a.EMPLNM, a.DEPTNM, a.EMPLNO, a.DEPTNO, a.DEPTID
  from pec.hrs110ma a, pec.hrs009m3 b,
--几个表中的DEPTID部门ID是一样的,还有IDNO身份证号,EMPLNM员工姓名,EMPLNO员工编号,DEPTNM部门名称
 where a.DEPTID = b.DEPTID
   and a.stop_date is null
   and a.trnsid = '1' --trnsid代表是否在职
   and b.SUP_DEPTNO = '01040000'
   and b.factno = '3300'
   and b.stop_date is null
--先执行一下上面的SQL语句,表里面尽量不要带 ‘.’;实在不行可以用'_'代替,表里带'.'可能会影响你以后的查询语句
-- and SUP_DEPTID = '00004199'  --我发现这个字段没用过,不知道在那张表
--你可以这么改 and SUP_DEPTID in (select ..........)


温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-01-04
都是英文看不懂。追问

SQL的问题啊,我已经注明1了表。

相似回答