接上一貼: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

解决方案 »

  1.   

    對應的欄位為:
    empno,empname,sdate,edate,dept
      

  2.   


    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
    */
      

  3.   

    你給的數據有點問題,導致得出的結果不符,檢查了半天才發現是你給的數據的問題。完整代碼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-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
    */
      

  4.   

    有个类似的问题,借楼主的地方叫几个高手看看
    http://community.csdn.net/Expert/topic/5597/5597422.xml?temp=.887005
    http://community.csdn.net/Expert/topic/5598/5598247.xml?temp=.7053644
      

  5.   

    測試成功
    謝謝paoluo(一天到晚游泳的鱼)!