查询结果不可靠

时间:2016-08-30 08:56:14

标签: visual-foxpro

我需要从打开的订单中获取销售数据,按代码排序。物料在库存表中按批号分隔(出于可追溯性原因),但批号不会出现在订单表中。 2个表之间的唯一链接是部件号。

我的查询

SELECT代码,SUM(qty * price)AS Sales     来自订单INNER JOIN库存ON orders.partno = stock.partno     GROUP BY代码

开始返回奇怪的结果(给定代码的销售数字非常高),我将其更改为

SELECT DISITNCT orders.partno,stock.lot,stock.code     来自订单INNER JOIN库存ON orders.partno = stock.partno

并注意到,如果某个给定零件的批次有库存,则全部退回

第1部分LotA代码

Part1 LotB代码

Part1 LotC代码

这意味着如果客户订购300单位的Part1,我的查询将返回900,我的销售数字将乘以3.

我该如何解决这个问题?

必须注意的是,我不是从数据库中工作,而是从一组表中工作,其结构有时可能是异想天开的。

1 个答案:

答案 0 :(得分:0)

在编写查询时,您应该使用table.column或alias.column引用。正如您的问题所示,我们不知道PRICE来自哪个表...零件表或批表。如果您正在处理库存跟踪(例如FIFO或LIFO方法会计),则必须与批次表关联以跟踪/销售库存。

现在,为什么你会得到大数字?这是因为笛卡尔结果。如果你不熟悉它,对于一个表中连接到另一个表的每个记录,它会返回许多匹配。

因此,如果您有一个订单项的订单,则产品可用表中只有一个订单项。所以这是简单的1:1比例。现在,您的STOCK表可以具有完全相同部件号的多个记录。您现在为Stock表中的EACH LOT ENTRY返回相同的原始订单行项目。所以现在,对于你的1项,你得到3个批次(1:3结果)。

我知道这从商品销售成本的基础上很重要,因此您需要知道它加入了哪个“批次”,这样您才能获得适当定价的特定记录。

但是,如果您拥有所有销售产品的通用产品表,并且该表具有通用的普通价格,无论销售使用哪个“批次”,我都会加入该表而不是您的报告。但是你仍然会有库存,商品成本等的会计问题。