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
支給年月 職員番号
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
from A left outer join B on A.支給年月=B.支給年月
(支給年月 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.職員番号
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 行受影响)
*/
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
対象年度 対象年月 職員番号 対象年月日 表 級 号
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
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.職員番号
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.職員番号
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