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

如果实现这样子一个结果集?
下单表T1:
      负责人       客户       品种         下单数量       日期
          1               2             3               10           2007-02-10
          1               2             3               30           2007-02-14

出货表T2:
      负责人       客户       品种         出货数量       日期
        1                 2             3                     2           2007-02-15
        1                 2             3                     4           2007-02-16
        1                 2             3                     2           2007-02-17
        1                 2             3                     10         2007-02-18
通过下单表T1和出货表T2,如何查询统计出这样子的累计表T3:
  负责人     客户     品种     下单数量     出货数量     剩余数量       日期
      1             2           3               10                 10               0               2007-02-10
      1             2           3               30                 8                 22             2007-02-14
总之就是先用最早的下单数量减去出货数量,直到最早日期的剩余量为0,然后再用第二个日期的下单量减去出货数量,以此类推。


------解决方案--------------------
结构有问题吧....

例如:

如果下单1,2分别是:10, 30,
出货时,却是下单2先出的货.即:出20,

你怎么可能用最早的日期下单货量-出货量? 那就不是零,而是负数了.

不知道我这样说,是不是存在这个问题.
------解决方案--------------------
本人认为从业务上讲出货是根据下单来的.因此,表结构应为:

下单表T1:
下单ID 负责人 客户 品种 下单数量 日期

出货表T2:
出货ID 下单ID 出货数量 日期


如此才是正确便捷的表结构及关系.
------解决方案--------------------
declare @sum int
select @sum=sum(出货数量) from T2
select 负责人,客户,品种,下单数量,0 as 出货数量,0 as 剩余数量,日期 into #temp from T1 order by 日期
update T1 set @sum=@sum-下单数量,
出货数量=(case when @sum> =0 then 下单数量 when @sum+下单数量> =0 then @sum+下单数量 else 0 end),
剩余数量=(case when @sum> =0 then 0 when @sum+下单数量> =0 then -@sum else 下单数量 end)
select * from #temp

请问一个sql依据如何写