- 爱易网页
 
                        - 
                            MSSQL教程
 
                        - 如果实现这样子一个结果集?解决思路 
 
                         
                    
                    
                    日期:2014-05-19  浏览次数:20624 次 
                    
                        
                         如果实现这样子一个结果集?
下单表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语句的写法,该怎么处理