求一SQL语句,按时间查询部门职务下面的人员?
偶要写一个部门职务人员的查询,当选择一个时间后,点部门下面的职务时,就要动态加载职务下面的人员!表结构如下:
TB_RSGL_GYJL 雇佣记录表 TB_RSGL_YG 员工表
AID , 主键 AID, 主键
YGID, 员工ID(关联TB_RSGL_YG的AID), XM, 姓名
BMZWID 部门职务ID(关联部门职务AID), XB ,性别
LXBH, 类型编号(1为入职,2为调职,3为离职), SR ,生日
SJ, 时间(可为入职,调职,或离职时间),
...... ......
我现在已经可以点击部门下面的职务,获取TB_RSGL_GYJL表的BMZWID,从而查询该部门职务下面的员工.但是,要通过某一时刻来查询该员工是否处在该部门...,在某一时刻员工只有入职,调职,离职的一种状态,该员工所在部门已经调职,离职了,就不需要加载该员工了...,
自己写的SQL语句如下:
select TB_RSGL_YG.XM from TB_RGGL_GYJL,TB_RSGL_YG where TB_RSGL_GYJL.YGID = TB_RSGL_YG.AID AND TB_RSGL_GYJL.bmzwid = '获取的值' and TB_RSGL_GYJL.SJ < = '选取的时间'.
这样写的话已经离职,调职的员工,也会加载进来,现求各位大哥帮我改下好语句...
------解决方案--------------------不是特别明白你的意思,不过加上LXBH=1的条件不就OK了么
不知道是不是满足你的要求
------解决方案--------------------select TB_RSGL_YG.XM from TB_RGGL_GYJL,TB_RSGL_YG where TB_RSGL_GYJL.YGID = TB_RSGL_YG.AID AND TB_RSGL_GYJL.bmzwid = '获取的值 ' and TB_RSGL_GYJL.LXBH = 1
------解决方案--------------------select TB_RSGL_YG.XM from TB_RGGL_GYJL,TB_RSGL_YG where TB_RSGL_GYJL.YGID = TB_RSGL_YG.AID AND TB_RSGL_GYJL.bmzwid = '获取的值 ' and ((TB_RSGL_GYJL.SJ < = '选取的时间 ' and LXBH=1) or (TB_RSGL_GYJL.SJ > '选取的时间 ' and LXBH=2) or (TB_RSGL_GYJL.SJ > '选取的时间 ' and LXBH=3).
------解决方案--------------------没有建表测试,LZ试一下
--获取以前入职后来有离职,调职记录的数据
select a.XM from TB_RSGL_YG a inner join TB_RSGL_GYJL b on a.AID=b.YGID
where b.BMZWID = '获取的值 ' and (b.SJ < '选取的时间 ' and b.LXBH=1)--入职的
and (
b.SJ > '选取的时间 ' and (b.LXBH=2 or b.LXBH=3 )--有离职和调职的情况
or b.AID in--只有入职的情况,即只有一条记录的就是正在职的
(
select AID from TB_RSGL_GYJL group by YGID having count(*)=1
)
)
------解决方案--------------------不就是库表结构有问题嘛,人员也没个主键,难道要用姓名做主键? 同名人将会导致查询错误。
强烈建议修改库表结构,……
------解决方案--------------------SQL code
declare @date datetime ,@BMZWID int
set @date='2007-10-26' --選取時間
set @BMZWID=1 --選取部門職務ID
select T1.XM
from TB_RSGL_YG T1
inner join
(select A.* from TB_RSGL_GYJL A
inner join
(select YGID, max(SJ) as SJ
from TB_RSGL_GYJL
where SJ <=@date
group by YGID) B
on A.YGID=B.YGID and A.SJ=B.SJ
where BMZWID=@BMZWID
and A.LXBH in (1,2)
) T2
on T1.AID=T2.YGID