接上一貼:http://community.csdn.net/Expert/topic/5599/5599578.xml?temp=.952923如果在tab1中加多兩本欄位如下:
id(自動增長型),empno,empdate(異動日期),old_dept(原部門),new_dept(新部門)tab2中也加多一欄位:
有其中一些字段:id(自動增長型),empno,empname,indate(入職日期),outdate(離職日期),dept(部門)數據環境:
create table tab1 (id int ,empno int ,empdate datetime,old_dept varchar(10),new_dept varchar(10))
insert into tab1
select 1,321,'2007-04-17 00:00:00.000','A','B' union all
select 2,192,'2007-04-17 00:00:00.000','A','B' union all
select 18,192,'2007-04-18 00:00:00.000','B','C'union all
select 753,192,'2007-04-23 00:00:00.000','C','D'union all
select 3,193,'2007-04-17 00:00:00.000','A','B'union all
select 19,193,'2007-04-18 00:00:00.000','B','C'union all
select 755,193,'2007-04-23 00:00:00.000','C','D'union all
select 17,240,'2007-04-18 00:00:00.000','A','B'union all
select 21,195,'2007-04-18 00:00:00.000','A','B'union all
select 5,195,'2007-04-17 00:00:00.000','B','C'union all
select 759,195,'2007-04-23 00:00:00.000','C','D'
create table tab2 (id int ,empno int ,empname varchar(30),indate datetime,outdate datetime,dept varchar(10))
insert into tab2
select 1,192,'刘香生','2004-06-11 00:00:00.000',NULL,'D' union all
select 10,193,'黄桂秀','2004-07-12 00:00:00.000',NULL,'D' union all
select 15,195,'钟小玲','2004-09-02 00:00:00.000',NULL,'D' union all
select 66,240,'李惠清','2006-05-26 00:00:00.000',NULL,'B' union all
select 156,321,'龙小琼','2006-06-05 00:00:00.000','2007-12-29 00:00:00.000','B'結果:
192 刘香生 2004-06-11 00:00:00.000 2007-04-17 00:00:00.000 A
192 刘香生 2007-04-17 00:00:00.000 2007-04-18 00:00:00.000 B
192 刘香生 2007-04-18 00:00:00.000 2007-04-23 00:00:00.000 C
192 刘香生 2007-04-23 00:00:00.000 NULL D
193 黄桂秀 2004-07-12 00:00:00.000 2007-04-17 00:00:00.000 A
193 黄桂秀 2007-04-17 00:00:00.000 2007-04-18 00:00:00.000 B
193 黄桂秀 2007-04-18 00:00:00.000 2007-04-23 00:00:00.000 C
193 黄桂秀 2007-04-23 00:00:00.000 NULL D
195 钟小玲 2004-09-02 00:00:00.000 2007-04-17 00:00:00.000 A
195 钟小玲 2007-04-17 00:00:00.000 2007-04-18 00:00:00.000 B
195 钟小玲 2007-04-18 00:00:00.000 2007-04-23 00:00:00.000 C
195 钟小玲 2007-04-23 00:00:00.000 NULL D
240 李惠清 2006-05-26 00:00:00.000 2007-04-18 00:00:00.000 A
240 李惠清 2007-04-18 00:00:00.000 NULL B
321 龙小琼 2006-06-05 00:00:00.000 2007-04-17 00:00:00.000 A
321 龙小琼 2007-04-17 00:00:00.000 2007-12-29 00:00:00.000 B
id(自動增長型),empno,empdate(異動日期),old_dept(原部門),new_dept(新部門)tab2中也加多一欄位:
有其中一些字段:id(自動增長型),empno,empname,indate(入職日期),outdate(離職日期),dept(部門)數據環境:
create table tab1 (id int ,empno int ,empdate datetime,old_dept varchar(10),new_dept varchar(10))
insert into tab1
select 1,321,'2007-04-17 00:00:00.000','A','B' union all
select 2,192,'2007-04-17 00:00:00.000','A','B' union all
select 18,192,'2007-04-18 00:00:00.000','B','C'union all
select 753,192,'2007-04-23 00:00:00.000','C','D'union all
select 3,193,'2007-04-17 00:00:00.000','A','B'union all
select 19,193,'2007-04-18 00:00:00.000','B','C'union all
select 755,193,'2007-04-23 00:00:00.000','C','D'union all
select 17,240,'2007-04-18 00:00:00.000','A','B'union all
select 21,195,'2007-04-18 00:00:00.000','A','B'union all
select 5,195,'2007-04-17 00:00:00.000','B','C'union all
select 759,195,'2007-04-23 00:00:00.000','C','D'
create table tab2 (id int ,empno int ,empname varchar(30),indate datetime,outdate datetime,dept varchar(10))
insert into tab2
select 1,192,'刘香生','2004-06-11 00:00:00.000',NULL,'D' union all
select 10,193,'黄桂秀','2004-07-12 00:00:00.000',NULL,'D' union all
select 15,195,'钟小玲','2004-09-02 00:00:00.000',NULL,'D' union all
select 66,240,'李惠清','2006-05-26 00:00:00.000',NULL,'B' union all
select 156,321,'龙小琼','2006-06-05 00:00:00.000','2007-12-29 00:00:00.000','B'結果:
192 刘香生 2004-06-11 00:00:00.000 2007-04-17 00:00:00.000 A
192 刘香生 2007-04-17 00:00:00.000 2007-04-18 00:00:00.000 B
192 刘香生 2007-04-18 00:00:00.000 2007-04-23 00:00:00.000 C
192 刘香生 2007-04-23 00:00:00.000 NULL D
193 黄桂秀 2004-07-12 00:00:00.000 2007-04-17 00:00:00.000 A
193 黄桂秀 2007-04-17 00:00:00.000 2007-04-18 00:00:00.000 B
193 黄桂秀 2007-04-18 00:00:00.000 2007-04-23 00:00:00.000 C
193 黄桂秀 2007-04-23 00:00:00.000 NULL D
195 钟小玲 2004-09-02 00:00:00.000 2007-04-17 00:00:00.000 A
195 钟小玲 2007-04-17 00:00:00.000 2007-04-18 00:00:00.000 B
195 钟小玲 2007-04-18 00:00:00.000 2007-04-23 00:00:00.000 C
195 钟小玲 2007-04-23 00:00:00.000 NULL D
240 李惠清 2006-05-26 00:00:00.000 2007-04-18 00:00:00.000 A
240 李惠清 2007-04-18 00:00:00.000 NULL B
321 龙小琼 2006-06-05 00:00:00.000 2007-04-17 00:00:00.000 A
321 龙小琼 2007-04-17 00:00:00.000 2007-12-29 00:00:00.000 B
empno,empname,sdate,edate,dept
Select
A.empno,
B.empname,
A.empdate As sdate,
IsNull(Min(C.empdate), B.outdate) As edate,
A.dept
From
(Select empno, empdate, new_dept As dept From tab1
Union All
Select A.empno, A.indate As empdate, B.old_dept From tab2 A Inner Join tab1 B On A.empno = B.empno Inner Join (Select empno, Min(empdate) As empdate From Tab1 Group By empno) C On B.empno = C.empno And B.empdate = C.empdate ) A
Inner Join
tab2 B
On A.empno = B.empno
Left Join
tab1 C
On A.empno = C.empno And A.empdate < C.empdate
Group By
A.empno, B.empname, A.empdate, B.outdate, A.dept
/*
結果:
192 刘香生 2004-06-11 00:00:00.000 2007-04-17 00:00:00.000 A
192 刘香生 2007-04-17 00:00:00.000 2007-04-18 00:00:00.000 B
192 刘香生 2007-04-18 00:00:00.000 2007-04-23 00:00:00.000 C
192 刘香生 2007-04-23 00:00:00.000 NULL D
193 黄桂秀 2004-07-12 00:00:00.000 2007-04-17 00:00:00.000 A
193 黄桂秀 2007-04-17 00:00:00.000 2007-04-18 00:00:00.000 B
193 黄桂秀 2007-04-18 00:00:00.000 2007-04-23 00:00:00.000 C
193 黄桂秀 2007-04-23 00:00:00.000 NULL D
195 钟小玲 2004-09-02 00:00:00.000 2007-04-17 00:00:00.000 A
195 钟小玲 2007-04-17 00:00:00.000 2007-04-18 00:00:00.000 B
195 钟小玲 2007-04-18 00:00:00.000 2007-04-23 00:00:00.000 C
195 钟小玲 2007-04-23 00:00:00.000 NULL D
240 李惠清 2006-05-26 00:00:00.000 2007-04-18 00:00:00.000 A
240 李惠清 2007-04-18 00:00:00.000 NULL B
321 龙小琼 2006-06-05 00:00:00.000 2007-04-17 00:00:00.000 A
321 龙小琼 2007-04-17 00:00:00.000 2007-12-29 00:00:00.000 B
*/
insert into tab1
select 1,321,'2007-04-17 00:00:00.000','A','B' union all
select 2,192,'2007-04-17 00:00:00.000','A','B' union all
select 18,192,'2007-04-18 00:00:00.000','B','C'union all
select 753,192,'2007-04-23 00:00:00.000','C','D'union all
select 3,193,'2007-04-17 00:00:00.000','A','B'union all
select 19,193,'2007-04-18 00:00:00.000','B','C'union all
select 755,193,'2007-04-23 00:00:00.000','C','D'union all
select 17,240,'2007-04-18 00:00:00.000','A','B'union all
select 21,195,'2007-04-17 00:00:00.000','A','B'union all
select 5,195,'2007-04-18 00:00:00.000','B','C'union all
select 759,195,'2007-04-23 00:00:00.000','C','D'
create table tab2 (id int ,empno int ,empname Nvarchar(30),indate datetime,outdate datetime,dept varchar(10))
insert into tab2
select 1,192,N'刘香生','2004-06-11 00:00:00.000',NULL,'D' union all
select 10,193,N'黄桂秀','2004-07-12 00:00:00.000',NULL,'D' union all
select 15,195,N'钟小玲','2004-09-02 00:00:00.000',NULL,'D' union all
select 66,240,N'李惠清','2006-05-26 00:00:00.000',NULL,'B' union all
select 156,321,N'龙小琼','2006-06-05 00:00:00.000','2007-12-29 00:00:00.000','B'Select
A.empno,
B.empname,
A.empdate As sdate,
IsNull(Min(C.empdate), B.outdate) As edate,
A.dept
From
(Select empno, empdate, new_dept As dept From tab1
Union All
Select A.empno, A.indate As empdate, B.old_dept From tab2 A Inner Join tab1 B On A.empno = B.empno Inner Join (Select empno, Min(empdate) As empdate From Tab1 Group By empno) C On B.empno = C.empno And B.empdate = C.empdate ) A
Inner Join
tab2 B
On A.empno = B.empno
Left Join
tab1 C
On A.empno = C.empno And A.empdate < C.empdate
Group By
A.empno, B.empname, A.empdate, B.outdate, A.deptGO
Drop Table tab1, tab2
/*
結果:
192 刘香生 2004-06-11 00:00:00.000 2007-04-17 00:00:00.000 A
192 刘香生 2007-04-17 00:00:00.000 2007-04-18 00:00:00.000 B
192 刘香生 2007-04-18 00:00:00.000 2007-04-23 00:00:00.000 C
192 刘香生 2007-04-23 00:00:00.000 NULL D
193 黄桂秀 2004-07-12 00:00:00.000 2007-04-17 00:00:00.000 A
193 黄桂秀 2007-04-17 00:00:00.000 2007-04-18 00:00:00.000 B
193 黄桂秀 2007-04-18 00:00:00.000 2007-04-23 00:00:00.000 C
193 黄桂秀 2007-04-23 00:00:00.000 NULL D
195 钟小玲 2004-09-02 00:00:00.000 2007-04-17 00:00:00.000 A
195 钟小玲 2007-04-17 00:00:00.000 2007-04-18 00:00:00.000 B
195 钟小玲 2007-04-18 00:00:00.000 2007-04-23 00:00:00.000 C
195 钟小玲 2007-04-23 00:00:00.000 NULL D
240 李惠清 2006-05-26 00:00:00.000 2007-04-18 00:00:00.000 A
240 李惠清 2007-04-18 00:00:00.000 NULL B
321 龙小琼 2006-06-05 00:00:00.000 2007-04-17 00:00:00.000 A
321 龙小琼 2007-04-17 00:00:00.000 2007-12-29 00:00:00.000 B
*/
http://community.csdn.net/Expert/topic/5597/5597422.xml?temp=.887005
http://community.csdn.net/Expert/topic/5598/5598247.xml?temp=.7053644
謝謝paoluo(一天到晚游泳的鱼)!