- 爱易网页
-
MSSQL教程
- 如果实现这样子一个结果集?解决思路
日期: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依据如何写