用一條或幾條語句實現:一個員工表的一部分:
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)所有的員工的所在部門的記錄
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)所有的員工的所在部門的記錄
解决方案 »
- 求一个SQL语句
- sql2005,设计表的时候,id不从1开始,从5开始的??10分
- 在SQL Server中读取Excel中的数据存在的问题
- 求一简单SQL语句
- 複雜SQL:求表中部份字段值,應該怎樣優化?
- MS-SQL Server中,如何把没有任何数据的表(曾经有过数据)的自动增量重新从1开始自增?
- 问各位大大一个树型结构查询结果加工的问题,谢谢
- 求高手一条sql语句 行转列,列转行
- 高手请进,有一个问题不明,谢绝灌水,正确者500分鼓励!!!
- 我写了SQL语句,大家帮忙分析分析,该做如何改进。含(显示预计的执行计划)图,不甚感激!
- 同一张表里,如何把某一字段重复的行找出来的语句怎么写?
- 索引的简单问题
这个是最新的记录还是入职的记录阿?最新记录的话:
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
left join DeptChangeTable B
on A.EM_empNO=B.DT_empNo
where DT_ChangeDate=@dDate
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)
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)
那些人变动了部门,且其心所在的部门是什么
有下面得出
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