请大家解决个 数据(数量)拆分的问题????
请大家解决个 数据(数量)拆分的问题????
按照数量拆分数据,合并成一个表
表A
物料 数量 日期
A001 100 2005-05-05
A001 120 2005-05-06
A001 135 2005-05-07
B001 100 2005-05-06
表B
物料 数量 日期
A001 80 2005-05-08
A001 145 2005-05-09
B001 10 2005-05-10
C001 10 2005-05-09
结果:
物料 数量 A表日期 B表日期
A001 80 2005-05-05 2005-05-08
A001 20 2005-05-05 2005-05-09
A001 120 2005-05-06 2005-05-09
A001 5 2005-05-07 2005-05-09
A001 130 2005-05-07 2005-05-09
B001 10 2005-05-06 2005-05-10
B001 90 2005-05-06 null
C001 10 null 2005-05-09
------解决方案--------------------这个很难,吃饭了再看
------解决方案--------------------没看懂结果是如何来的?
------解决方案--------------------用游标的方法测试成功
--建立环境
declare @A table (
物料 varchar(20),
数量 int,
日期 datetime
)
insert @a select
'A001 ', 100, '2005-05-05 '
union all select
'A001 ', 120, '2005-05-06 '
union all select
'A001 ', 135, '2005-05-07 '
union all select
'B001 ', 100, '2005-05-06 '
declare @B table(
物料 varchar(20),
数量 int,
日期 datetime
)
insert @b select
'A001 ', 80, '2005-05-08 '
union all select
'A001 ', 145, '2005-05-09 '
union all select
'B001 ', 10, '2005-05-10 '
union all select
'C001 ', 10, '2005-05-09 '
--开始计算
declare @物料a varchar(20)
declare @物料b varchar(20)
declare @数量a int
declare @数量b int
declare @日期a datetime
declare @日期b datetime
declare @FETCH_STATUS_a int
declare @FETCH_STATUS_b int
declare cur_a CURSOR LOCAL READ_ONLY for
select * from @a order by 物料,日期
declare cur_b CURSOR LOCAL READ_ONLY for
select * from @b order by 物料,日期
open cur_a
open cur_b
declare @结果 table (
物料 varchar(20),
数量 int,
A表日期 datetime,
B表日期 datetime
)
FETCH NEXT FROM cur_a
INTO @物料a, @数量a, @日期a
set @FETCH_STATUS_a=@@FETCH_STATUS
FETCH NEXT FROM cur_b
INTO @物料b, @数量b, @日期b
set @FETCH_STATUS_b=@@FETCH_STATUS
while 1=1
begin
if @FETCH_STATUS_a <> 0
begin
while @FETCH_STATUS_b=0
begin
insert @结果 values(@物料b, @数量b, null, @日期b)
FETCH NEXT FROM cur_b
INTO @物料b, @数量b, @日期b
set @FETCH_STATUS_b=@@FETCH_STATUS
end
goto theEnd
end
if @FETCH_STATUS_b <> 0
begin
while @FETCH_STATUS_a=0
begin
insert @结果 values(@物料a, @数量a, @日期a,null)
FETCH NEXT FROM cur_a
INTO @物料a, @数量a, @日期a
set @FETCH_STATUS_a=@@FETCH_STATUS
end
goto theEnd
end
if @物料a <@物料b
begin