一个说起来挺简单但是越快越头疼的一个项目,求懂的大神教一下,可能字数有些多。但是还是希望有大大求教一下!
求一个部门首先我要用总表里也就是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,trnsidselect *
  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'字有些多了,还是希望有大神帮帮忙,有强迫症又不是很会,特来请教。谢谢各位了。

解决方案 »

  1.   

    IDNO,EMPLNM,EMPLNO,DEPTID,DEPTNM,QTY,YYYYMM(201612),FACTNO,trnsid 
    这些个字段原来都是属于哪个表的,请说明。
      

  2.   

    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个字段,猜不出从哪个表来了。