我有一个跟踪医疗样本的数据库,您可以将每个样本视为唯一的序列号。
设计:我有3个表(Inventory,InventoryTransactions,Manifests)。 请看看拍摄的照片。
库存:拥有我们现在拥有的所有物品及其属性,或者之前拥有它们,您可以将其视为产品。
清单:它记录了从一个地方到另一个地方的多个街区的转移,它记录了您可以将其视为订单的移动类型(转移,销售,退货,收货,更换)。 (转让和收到)意味着此SKU在公司,但(销售,退货,更换)意味着此SKU在外面。
库存交易是两个表之间的联合表,它将哪个SKU转移到哪个Manifest,你可以把它想象为OrderDetails。
示例:我们在清单m1收到了项目1A,然后转移到清单m2中公司的另一个仓库,然后卖给清单m3中的客户。
我想要的是,我想查询现在正在处理的项目,在公司的任何仓库中,但正如您在我的示例中看到的那样,where子句是移动='收到'或者运动='转移') 没有给我正确的信息,因为SKU可能会在稍后出售。
我有一个解决方案的想法:它为SKU提供了最新的动作,如果它不在公司之外,我们可以假设它在#34;""公司。但我认为这是一个有缺陷的解决方案。
这是一个MS Access数据库,但我熟悉SQL语句,我想知道如何在逻辑上实现这一点。 对不起我的英语不好。我希望我表达自己的意见。
更新:这是我的解决方案
SELECT Inventory.ID, Last(Manifests.MovementID) AS Lmove
FROM Manifests INNER JOIN (Inventory INNER JOIN InventoryTransactions ON Inventory.ID = InventoryTransactions.SKUID) ON Manifests.ID = InventoryTransactions.ManifestID
GROUP BY Inventory.ID
HAVING (((Last(Manifests.MovementID))<>2 And (Last(Manifests.MovementID))<>3 And (Last(Manifests.MovementID))<>5));
其中2,3,5是传出移动ID
预期结果是我们收到但尚未销售的所有商品。 这里有一些来自每张桌子的样品 &#34;库存和#34;
SKU
TS-15 - 0415-A
&#34; InventoryTransactions&#34;
SKUID ManifestID
TS-15 - 0415-A NHSBC 1316 081915
TS-15 - 0415-A Medimmune (PO # A-20190)
&#34;舱单&#34;
ID MovementID
NHSBC 1316 081915 Received
Medimmune (PO # A-20190) Sale
在此样本&#34; TS-15 - 0415-A&#34;收到清单&#34; NHSBC 1316 081915&#34;然后在清单&#34; Medimmune(PO#A-20190)&#34; 理想的结果不应包括&#34; TS-15 - 0415-A&#34;我的查询是因为它现在已售出,因此我们的库存中没有它。