首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

遇到一个比较麻烦的先进先出有关问题

2013-08-16 
遇到一个比较麻烦的先进先出问题出库表PIDNumpDateexpDte00121900-01-011900-01-01001321900-01-012017-01

遇到一个比较麻烦的先进先出问题
出库表


PID   Num  pDate       expDte
001   2   1900-01-01  1900-01-01
001   32  1900-01-01  2017-01-01
001   4   2011-01-01  1900-01-01
001   50  2012-01-01  2017-01-01 

PID---商品ID,Num---数量,pDate---生产日期,expDate---到期日期
某些商品在输入的时候,操作者可能只输入生产日期或者到期日期在其中一项
操作者没有输入日期的,系统自动给成1900年,下同。

库存表

PID  Num  pDate       expDate    InDate
001  1   1900-01-01  1900-01-01  2013-01-01
001  2   1900-01-01  1900-01-01  2013-02-01
001  1   1900-01-01  1900-01-01  2013-03-01
001  70  1900-01-01  2017-01-01  2013-06-02
001  10  2011-01-01  1900-01-01  2013-01-03
001  20  2012-04-01  2017-01-01  2013-05-02

InDate---入库日期

从库存表里按出库表扣减库存,要求优先按生产日期,再按到期日期匹配出库。按入库日期先进先出。
结果应该是:
库存表

PID  Num  pDate       expDate    InDate
001  0   1900-01-01  1900-01-01  2013-01-01---扣出库表第一条
001  1   1900-01-01  1900-01-01  2013-02-01---扣出库表第一条
001  1   1900-01-01  1900-01-01  2013-03-01---没扣
001  0   1900-01-01  2017-01-01  2013-01-02---扣出库表第二、四条
001  0   2011-01-01  1900-01-01  2013-01-03---扣出库表第三条
001  18  2012-01-01  2017-01-01  2013-05-02---虽然生产日期不符合,但到期日期符合出库第4条



[解决办法]
我的建议:
1,给表加个自增列。用自增列来排序先后。
2,查找论坛以前的帖子,先进先出的很多
[解决办法]
这种计算方式,用SQL不好实现。个人认为只有用存储过程了。但分析了一下,跟楼主的意思有些出入,我觉得结果应该是:
PID  Num  pDate       expDate    InDate 


001  0   1900-01-01  1900-01-01  2013-01-01---扣出库表第一条
001  1   1900-01-01  1900-01-01  2013-02-01---扣出库表第一条
001  1   1900-01-01  1900-01-01  2013-03-01---没扣
001  0   1900-01-01  2017-01-01  2013-01-02---扣出库表第二、四条
001  6   2011-01-01  1900-01-01  2013-01-03---扣出库表第三条
001  8   2012-01-01  2017-01-01  2013-05-02 ---虽然生产日期不符合,但到期日期符合出库第4条

热点排行