日期:2014-05-19  浏览次数:20654 次

请大家解决个 数据(数量)拆分的问题????
请大家解决个   数据(数量)拆分的问题????
按照数量拆分数据,合并成一个表
表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