用一條或幾條語句實現:一個員工表的一部分:
create table EmpTable(EM_empNO varchar(8),EM_empName nvarchar(20),EM_deptNo varchar(4))
一個部門調動表:(DT_ChangeDate為調動日期)
create table DeptChangeTable(DT_ChangeDate datetime,DT_empNo varchar(8),DT_OldDeptNo varchar(4),DT_newDeptNo varchar(4))
現在查出某一天(@Date)所有的員工的所在部門的記錄

解决方案 »

  1.   

    有点不清楚这个逻辑,员工表里面有个部门的编号了,
    这个是最新的记录还是入职的记录阿?最新记录的话:
    select * from EmpTable
    入职记录:
    select EM_empNO,EM_empName,COALESCE( EM_deptNo,DT_newDeptNo)
    from EmpTable
    left join DeptChangeTable on EM_empNO=DT_empNo and DT_ChangeDate=@date
      

  2.   

    select * from EmpTable A
    left join DeptChangeTable B
    on A.EM_empNO=B.DT_empNo
    where DT_ChangeDate=@dDate
      

  3.   

    --try
    select m.EM_empNO,m.EM_empName,n.DT_empNo from EmpTable m,
    (select * from DT_ChangeDate a,(select max(DT_ChangeDate) DT_ChangeDate,DT_empNo from DeptChangeTable where DT_ChangeDate<=@Date 
    group by DT_empNo) b where a.DT_ChangeDate=b.DT_ChangeDate and a.DT_empNo=b.DT_empNo) n where m.EM_empNO=n.DT_empNo
    union all
    select m.EM_empNO,m.EM_empName,m.DT_empNo from EmpTable m where not exists(
    select 1 from (select * from DT_ChangeDate a,(select max(DT_ChangeDate ) DT_ChangeDate,DT_empNo from DeptChangeTable where DT_ChangeDate<=@Date 
    group by DT_empNo) b where a.DT_ChangeDate=b.DT_ChangeDate and a.DT_empNo=b.DT_empNo) n where m.EM_empNO=n.DT_empNo)
      

  4.   

    --上面有点小错误
    select m.EM_empNO,m.EM_empName,n.DT_newDeptNo from EmpTable m,
    (select * from DT_ChangeDate a,(select max(DT_ChangeDate) DT_ChangeDate,DT_empNo from DeptChangeTable where DT_ChangeDate<=@Date 
    group by DT_empNo) b where a.DT_ChangeDate=b.DT_ChangeDate and a.DT_empNo=b.DT_empNo) n where m.EM_empNO=n.DT_empNo
    union all
    select m.EM_empNO,m.EM_empName,m.EM_deptNo  from EmpTable m where not exists(
    select 1 from (select * from DT_ChangeDate a,(select max(DT_ChangeDate ) DT_ChangeDate,DT_empNo from DeptChangeTable where DT_ChangeDate<=@Date 
    group by DT_empNo) b where a.DT_ChangeDate=b.DT_ChangeDate and a.DT_empNo=b.DT_empNo) n where m.EM_empNO=n.DT_empNo)
      

  5.   

    首先你要求出到@date为止
    那些人变动了部门,且其心所在的部门是什么
    有下面得出
    select * from DT_ChangeDate a,(select max(DT_ChangeDate) DT_ChangeDate,DT_empNo from DeptChangeTable where DT_ChangeDate<=@Date 
    group by DT_empNo) b where a.DT_ChangeDate=b.DT_ChangeDate and a.DT_empNo=b.DT_empNo