在VFP8.0中,如何有条件地删除“商品库存表”中的零库存商品(但每个编号商品保留一个批号)?
在VFP8.0中,建立了“商品库存表”,字段有:商品编号、商品名称、厂牌、批号、数量、入库日期。每个商品编号的商品名称、厂牌都相同,但可以有多个批号。
现在经过一段时间商品销售,库存中有很多商品数量为零,现在需要有条件地删除零库存商品,删除条件是:
1、如果某编号的商品有某一批号有库存,则将该编号商品的所有其他批号为零库存的全部删除;
2、如果某编号的商品没有任何批号有库存,则只保留最新入库日期的那个批号,并将该编号商品的所有其他批号为零库存的全部删除。
例如:“商品库存表”数据为:
商品编号 商品名称 厂牌 批号 数量 入库日期
01 毛巾 东方毛巾厂 20120105 100 2012/05/02
01 毛巾 向阳毛巾厂 20110902 30 2012/03/12
01 毛巾 前进毛巾厂 20111103 0 2012/02/02
01 毛巾 永胜毛巾厂 20110705 0 2011/12/15
02 钢笔 东方钢笔厂 20120105 0 2011/06/02
02 钢笔 向阳钢笔厂 20110902 0 2011/12/12
02 钢笔 前进钢笔厂 20111103 0 2012/06/02
02 钢笔 永胜钢笔厂 20110705 0 2012/01/18
要求有条件地删除“商品库存表”中的零库存商品结果为:
商品编号 商品名称 厂牌 批号 数量 入库日期
01 毛巾 东方毛巾厂 20120105 100 2012/05/02
01 毛巾 向阳毛巾厂 20110902 30 2012/03/12
02 钢笔 前进钢笔厂 20111103 0 2012/06/02
敬向电脑专家请教,应如何编程?不胜感激!
[解决办法]
SELECT distinct a.* FROM tts a LEFT JOIN tts b ON a.商品编号=b.商品编号 WHERE b.数量>0 AND a.数量>0;
union;
SELECT * FROM tts a WHERE NOT exists(SELECT 1 FROM tts b WHERE a.商品编号=b.商品编号 AND b.数量>0 );
AND NOT exists(SELECT 1 FROM tts b WHERE a.商品编号=b.商品编号 AND a.入库日期<b.入库日期)
[解决办法]
这数据不应该删除吧,这个可流水记录呀,日后可能要查询的。
另外,这些数量为0的数据如何生成的?
[解决办法]
楼主需要解决的问题和最终结果好像不一致吧
[解决办法]
应该这样设计吧:
1、商品表
2、入库表
3、出库表
商品表 存放 商品名称、类型、型号、规格等信息,
想要库存时,再通过商品表、 出库表、入库表 计算得出。想得出任意日期的库存也是可以的。
优点:没有库存表,不存在增、减问题,也不存在你的问题
缺点:想要库存就必须计算才能得出。
仅供参考,请做过 进销库 的网友指正一下。
[解决办法]
豆老师言之有理。
本人认为应该再增加一个表(历史记录表),用于保存某一“批号”的库存商品“数量”为零的记录(如果某一批号的库存商品销售完毕,核实销售数量如果等于库存数量,此时将该批号的库存记录及销售记录一起移到“历史记录表”中)。至于有何益处,自己去想吧。
[解决办法]
分两段来处理容易理解一些:
*-- vfp9 代码Select * From 库存表 Where 数量 <> 0 Into Cursor temp1Select a.商品编号, Max(a.入库日期) As 入库日期 ; From 库存表 a ; Left Join temp1 b On a.商品编号 = b.商品编号 ; Where a.数量=0 And b.商品编号 Is Null ; Group By 1 Into Cursor temp2Select * From temp1 ;Union ;Select a.* From 库存表 a ; Inner Join temp2 b ; On a.商品编号=b.商品编号 And a.入库日期=b.入库日期 ; Into Cursor 结果表
[解决办法]
解决上面所述问题的笨办法:
*-- vfp9 代码*-- 建样本数据Create Cursor 库存表(商品编号 C(2), 商品名称 C(10), 厂牌 C(20), 批号 C(8), 数量 N(6), 入库日期 D)Text to cTemp NoShow01 毛巾 东方毛巾厂 20120105 100 2012/05/0201 毛巾 向阳毛巾厂 20110902 30 2012/03/1201 毛巾 前进毛巾厂 20111103 0 2012/02/0201 毛巾 永胜毛巾厂 20110705 0 2011/12/1502 钢笔 东方钢笔厂 20120105 0 2011/06/0202 钢笔 向阳钢笔厂 20110902 0 2011/12/1202 钢笔 前进钢笔厂 20111103 0 2012/06/0202 钢笔 前进钢笔厂 88888888 0 2012/06/02 && 同一天的第二笔02 钢笔 永胜钢笔厂 20110705 0 2012/01/18EndTextStrtofile(cTemp, 'temp.txt')cTemp = ''Append From temp.txt Delimited With BlankErase temp.txt*------Select * From 库存表 Where 数量 <> 0 Into Cursor temp1Select a.商品编号, Max(a.入库日期) As 入库日期 ; From 库存表 a ; Left Join temp1 b On a.商品编号 = b.商品编号 ; Where a.数量=0 And b.商品编号 Is Null ; Group By 1 Into Cursor temp2Select a.* From 库存表 a ; Inner Join temp2 b ; On a.商品编号=b.商品编号 And a.入库日期=b.入库日期 ; Into Cursor temp2 ReadwriteIndex on 商品编号+Dtos(入库日期) Tag temp UniqueCopy To tempZapDelete Tag AllAppend From tempErase temp.dbfSelect * From temp1 ;Union ;Select * From temp2 ;Into Cursor 结果表Use In temp1Use In temp2*------Browse