A表
支給年月 職員番号
200609 0000000001
200610 0000000001
200611 0000000001
200612 0000000001
B表
対象年度 対象年月 職員番号         対象年月日
2005 200608 0000000001 19910101
2006 200606 0000000001 19910101
2006 200607 0000000001 19910101
2006 200610 0000000001 19920101
2006 200612 0000000001 19930101
想要的接果 如下:A.支給年月   B.対象年月       B.対象年月日    職員番号          
200609         200607      19910101         0000000001       
200610            200610     19920101         0000000001        
200611            200610       19920101         0000000001
200612            200612       19930101         0000000001

解决方案 »

  1.   

    select A.支給年月,  B.対象年月,    B.対象年月日,  A.職員番号    
    from A left outer join B on A.支給年月=B.支給年月     
      

  2.   

    declare @A表 table
    (支給年月 varchar(10), 職員番号 varchar(10))
    insert  @A表 select 
    '200609', '0000000001'union all select  
    '200610', '0000000002'union all select  
    '200611', '0000000003'union all select  
    '200612', '0000000004'
    declare @B表 table 
    (対象年度 varchar(10), 対象年月 varchar(10), 職員番号 varchar(10),対象年月日 varchar(10))
    insert @B表 select 
    '2005', '200608', '0000000001', '19910101' union all select 
    '2006', '200606', '0000000002', '19910101' union all select 
    '2006', '200607', '0000000003', '19910101' union all select
    '2006', '200610', '0000000004', '19920101' union all select
    '2006', '200612', '0000000005', '19930101' 
    select a.支給年月,b.対象年月,b.対象年月日,a.職員番号 from @A表 a right join @B表 b on a.職員番号=b.職員番号
      

  3.   


    declare @A table (支給年月 char(6), 職員番号 char(10))
    insert into @a
    select '200609','0000000001' union
    select '200610','0000000001' union 
    select '200611','0000000001' union
    select '200612','0000000001' declare @b table (対象年度 char(4),対象年月 char(6),職員番号 char(10),対象年月日 char(8))
    insert into @b
    select 2005, 200608,'0000000001','19910101' union
    select 2006, 200606,'0000000001','19910101' union
    select 2006, 200607,'0000000001','19910101' union
    select 2006, 200610,'0000000001','19920101' union
    select 2006, 200612,'0000000001','19930101'select c.支給年月,c.対象年月,d.対象年月日,c.職員番号
    from (select a.支給年月,a.職員番号,max(b.対象年月) as 対象年月
          from @a a
          left join @b b on a.支給年月>=b.対象年月 and a.職員番号=b.職員番号 and 対象年度=left(支給年月,4)
          group by a.支給年月,a.職員番号
         ) c
    left join @b d on c.対象年月=d.対象年月
    /*
    支給年月   対象年月   対象年月日    職員番号
    ------ ------ -------- ----------
    200609 200607 19910101 0000000001
    200610 200610 19920101 0000000001
    200611 200610 19920101 0000000001
    200612 200612 19930101 0000000001(4 行受影响)
    */
      

  4.   

    -----------------------------------------------------
    create table tableA(支給年月 nvarchar(40),職員番号 nvarchar(40))
    insert into tableA select '200609','0000000001'
    insert into tableA select '200610','0000000001'
    insert into tableA select '200611','0000000001'
    insert into tableA select '200612','0000000001'create table tableB(対象年度 nvarchar(40),対象年月 nvarchar(40),職員番号 nvarchar(40),対象年月日 nvarchar(40))
    insert into tableB select '2005','200608','0000000001','19910101'
    insert into tableB select '2006','200606','0000000001','19910101'
    insert into tableB select '2006','200607','0000000001','19910101'
    insert into tableB select '2006','200610','0000000001','19920101'
    insert into tableB select '2006','200612','0000000001','19930101'想要的接果 如下:                                        
                                                             
    A.支給年月   B.対象年月    B.対象年月日    職員番号   
    200609         200607       19910101        0000000001
    200610            200610       19920101        0000000001
    200611            200610       19920101        0000000001
    200612            200612       19930101        0000000001select *
    from tableA
    select *
    from tableBalter table tableA  id int identity(1000,1) PRIMARY KEY
    alter table tableB add  支給年月 nvarchar(40), id int identity(1000,1) PRIMARY KEYselect *
    from tableBdeclare @i
    set @i=1000
    while @i<= (select max(id) from table2)
    begin
    insert into tableB(支給年月)
    select top 1 支給年月
    from (select top @i 支給年月 from tableA order by id desc) aa
    set @i=@i+1
    end
      

  5.   

    9楼 sdxiong  挺厉害,一看我数据就猜到了。
      

  6.   

    不过好像不对啊, B表 
    対象年度 対象年月 職員番号      対象年月日   表  級  号
    2005 200608 0000000001 19910101       01 01 010
    2006 200606 0000000001 19920101       01 02 010
    2006 200607 0000000001 19930101       02        03      010
    2006 200610 0000000001 19940101       01 02 010
    2006 200612 0000000001 19950101       05 02 010
    A表
    支給年月 職員番号
    200609 0000000001
    200610 0000000001
    200611 0000000001
    想要的接果 如下: A.支給年月  A.職員番号   B.対象年月  B.対象年月日   B.表 B.級 B.号
    200609 0000000001   200607        19930101    02       03      010
    200610 0000000001   200610        19940101    01 02 010
    200611 0000000001   200610        19940101    01 02 010
      

  7.   

    create  table zhiji(支給年月 char(6), 職員番号 char(10))
    insert into zhiji
    select '200609','0000000001' union
    select '200610','0000000001' union 
    select '200611','0000000001' union
    select '200612','0000000001' create  table  duixiang (対象年度 char(4),対象年月 char(6),職員番号 char(10),対象年月日 char(8))
    insert into duixiang
    select 2005, 200608,'0000000001','19910101' union
    select 2006, 200606,'0000000001','19910101' union
    select 2006, 200607,'0000000001','19910101' union
    select 2006, 200610,'0000000001','19920101' union
    select 2006, 200612,'0000000001','19930101'select * from zhiji
    select * from duixiangselect 支給年月,z.職員番号,対象年月,対象年月日
     from zhiji  z
    inner join duixiang d
    on z.支給年月>d.対象年月select 支給年月,z.職員番号,max(対象年月),max(対象年月日)
     from zhiji  z
    inner join duixiang d
    on z.支給年月>d.対象年月
    group by 支給年月,z.職員番号
      

  8.   

    不好意思,刚才的错了
    create  table zhiji(支給年月 char(6), 職員番号 char(10))
    insert into zhiji
    select '200609','0000000001' union
    select '200610','0000000001' union 
    select '200611','0000000001' union
    select '200612','0000000001' create  table  duixiang (対象年度 char(4),対象年月 char(6),職員番号 char(10),対象年月日 char(8))
    insert into duixiang
    select 2005, 200608,'0000000001','19910101' union
    select 2006, 200606,'0000000001','19910101' union
    select 2006, 200607,'0000000001','19910101' union
    select 2006, 200610,'0000000001','19920101' union
    select 2006, 200612,'0000000001','19930101'select * from zhiji
    select * from duixiang
    select 支給年月,z.職員番号,max(対象年月),max(対象年月日)
     from zhiji  z
    inner join duixiang d
    on z.支給年月>=d.対象年月
    and  left(z.支給年月,4) = d.対象年度
    group by 支給年月,z.職員番号
      

  9.   

    create table B(対象年度 int,対象年月 varchar(10),職員番号 varchar(10),対象年月日 varchar(10),表 varchar(10),級 varchar(10),号 varchar(10)) 
    insert into B values(2005,'200508','0000000001','19910101','01','01','010') 
    insert into B values(2006,'200606','0000000001','19920101','01','02','010') 
    insert into B values(2006,'200607','0000000001','19930101','02','03','010') 
    insert into B values(2006,'200610','0000000001','19940101','01','02','010') 
    insert into B values(2006,'200612','0000000001','19950101','05','02','010') 
    create table A(支給年月 varchar(10),職員番号 varchar(10)) 
    insert into A values('200609','0000000001') 
    insert into A values('200610','0000000001') 
    insert into A values('200611','0000000001') 
    select 
        A.支給年月, 
        A.職員番号, 
        B.対象年月, 
        B.対象年月日, 
        B.表, 
        B.級, 
        B.号 
    from 
        A,B 
    where 
        A.[支給年月]>=B.[対象年月] 
        and 
        not exists(select 1 from B m where m.[対象年月]>B.[対象年月] and m.[対象年月] <=A.[支給年月]) 
        
    /* 
    支給年月      職員番号      対象年月      対象年月日      表          級          号          
    ---------- ---------- ---------- ---------- ---------- ---------- ---------- 
    200609    0000000001 200607    19930101  02        03        010 
    200610    0000000001 200610    19940101  01        02        010 
    200611    0000000001 200610    19940101  01        02        010 
    */ drop table A,B
      

  10.   

    select a.支給年月,  b.対象年月,    b.対象年月日,    a.職員番号  from A a, B b where a.職員番号=b.職員番号 and b.対象年月=(select max(c.対象年月) from B c where c.職員番号=a.職員番号 and c.対象年月<=a.職員番号)