库存摘要访问

Posted

技术标签:

【中文标题】库存摘要访问【英文标题】:inventory summary Access 【发布时间】:2012-02-06 10:23:51 【问题描述】:

经过一番折腾,我终于得到了一个查询,该查询提供了所有产品的销售总额,另一个查询提供了所有产品的库存(下图)。

我在看 Allen Brown 的东西,我明白了,但我想知道我是否可以制作一份涵盖所有产品的所有可用库存的总结报告。共有 31 种产品,它们都出现在库存查询和销售查询中。

http://imageshack.us/photo/my-images/810/87887.jpg

http://imageshack.us/photo/my-images/827/8787j.jpg

关于要使用的编码的任何想法...

我想这是可能的,但我真的不知道从哪里开始

我真的很想制作一份报告,总结查询中每种产品的库存。

不是有一个按钮来处理一个特定产品的库存,而是有一个按钮可以同时处理查询中每个产品的库存。

这有意义吗?

谢谢

山姆 更新

这是查找股票的查询

SELECT TblStock.ProductID, Sum(TblStock.StockLevel) AS Stock, TblProduct.Item
FROM TblStock INNER JOIN TblProduct ON TblStock.ProductID = TblProduct.ProductID
GROUP BY TblStock.ProductID, TblProduct.Item;

这是查询销售数量的查询

SELECT TblProduct.Item, Sum(TblTotalSale.Size) AS Quantity, TblProduct.ProductID
FROM TblProduct INNER JOIN TblTotalSale ON TblProduct.[ProductID] = TblTotalSale.[ProductID]
GROUP BY TblProduct.Item, TblProduct.ProductID;

TblStock 看起来像

StockID ProductID   StockLevel
89  32  200
90  33  72
91  34  72
92  1   528
93  3   528
94  5   528
95  9   528
96  7   528
97  18  80
98  30  72
99  31  204

产品表看起来像

ProductID   Item    Price   StockDelivery   PriceSmall  Large   Small
1   Carling £2.50   528 £1.40   2   1
3   Carlsburg   £2.70   528 £1.60   2   1
5   IPA £2.30   528 £1.20   2   1
7   StrongBow   £2.80   528 £1.65   2   1
9   RevJames    £2.45   528 £1.30   2   1
11  Becks   £2.90   72      1   
12  WKDBlue £2.80   72      1   
13  WKDRed  £2.80   72      1   
14  SmirnoffIce £2.80   72      1   
15  KoppaburgPear   £3.10   72      1   
16  KoppaburgSum    £3.10   72      1   
17  Bulmers £2.90   72      1   
18  Vodka   £1.60   80      1   
19  Gin £1.40   80      1   
20  Sherry  £1.40   80      1   
21  Sambuca £1.70   80      1   
22  Rum £1.60   80      1   
23  Port    £1.60   80      1   
24  Whiskey £1.60   80      1   
25  Baileys £1.60   80      1   
26  Jagermeister    £1.50   80      1   
27  Martini £1.60   80      1   
28  CokeCan £0.85   72      1   
29  Coke    £1.30   204 £0.30   2   1
30  LemonadeCan £0.85   72      1   
31  Lemonade    £1.30   204 £0.30   2   1
32  Squash  £0.25   200     1   
33  Tonic   £0.85   72      1   
34  RedBull £1.90   72      1   
35  Nuts    £0.60   70      1   
36  Crisps  £0.60   70      1   

tbltotalSale 看起来像

TotalSalesID    ProductID   SalePrice   Day Time    Size
370 1   £2.50   05/02/2012  19:53:14    2
371 1   £1.40   05/02/2012  19:53:14    1
372 1   £2.50   05/02/2012  19:53:14    2
373 1   £1.40   05/02/2012  19:53:14    1
374 1   £2.50   05/02/2012  20:25:12    2
375 1   £1.40   05/02/2012  20:25:12    1
376 1   £2.50   05/02/2012  20:25:12    2
377 1   £1.40   05/02/2012  20:25:12    1
378 1   £2.50   05/02/2012  20:25:12    2
379 1   £2.50   05/02/2012  20:25:12    2
380 1   £1.40   05/02/2012  20:25:12    1
381 5   £2.30   05/02/2012  20:25:12    2
382 5   £2.30   05/02/2012  20:25:12    2
383 5   £1.20   05/02/2012  20:25:12    1
384 7   £2.80   05/02/2012  20:25:12    2
385 7   £1.65   05/02/2012  20:25:12    1
386 7   £1.65   05/02/2012  20:25:12    1
387 9   £1.30   05/02/2012  20:25:12    1
435 11  £2.90   05/02/2012  20:25:12    1
436 11  £2.90   05/02/2012  20:42:49    1
437 11  £2.90   05/02/2012  20:42:49    1

如果这样更容易,我可以上传我的数据库。

已尝试使用以下查询来满足我的需求,但它为每个产品 ID 返回 11 个结果,没有一个是正确的......

SELECT QrySaleTot.Item, QrySaleTot.ProductID, [QryStockLevel].[Stock]-[QrySaleTot].[Quantity] AS StockOnHand
FROM QrySaleTot, QryStockLevel
GROUP BY QrySaleTot.Item, QrySaleTot.ProductID, [QryStockLevel].[Stock]-[QrySaleTot].[Quantity];

谢谢

【问题讨论】:

你的问题我不清楚。您希望同时显示库存查询和销售查询吗?如果是这样,为什么不将这两个查询添加到查询设计窗口并与相关字段建立关系? 我想创建一个查询,它将添加两个表中的记录,或者更确切地说,从 ID 相同的 stock 表中的值中减去 sales 表中的值,例如,我希望 id 1 的 sale 值取自 ID 1 的 Stock 值,但我希望查询对所有 ID 执行此操作,因此查询结果将包含 29 个值 您的最后一个示例缺少 JOIN。您可以通过将产品 ID 从一个拖到另一个来创建连接。最终结果没有 29 件商品 - 您是否打算让所有产品(无论销售额和库存水平如何)都出现在您的结果中?你在阅读中看过 LEFT JOIN 了吗? 谢谢。内部连接修复了它:) 是的,这是一个为经理创建摘要报告以向他显示当前库存的查询。所有的产品都应该在里面。他们都将在 tbl 库存中有库存,因此即使没有销售也不会发生错误。 【参考方案1】:

您可以通过 id 连接两个表并减去。

SELECT Sales.ID, Stock.Level - Sales.Quantity 
FROM Sales 
INNER JOIN Stock
ON Sales.ID = Stock.ID

更新并没有太大的不同。玩弄查询设计窗口。您不妨阅读:

Fundamental Microsoft Jet SQL for Access 2000Intermediate Microsoft Jet SQL for Access 2000Advanced Microsoft Jet SQL for Access 2000

【讨论】:

我没有使用表,只是查询我有这个 SELECT QryStockLevel.ProductID, QryStockLevel.Item, QryStockLevel.Stock - QrySaleTot.Quantity FROM QrySaleTot, QryStockLevel INNER JOIN QryStockLevel ON QrySaleTot.ProductID = QryStockLevel.ProductID ;但它不起作用,内部连接的语法错误......还有其他想法吗?谢谢 您的查询必须基于表,所以是的,您正在使用表。当您请求详细回复时,请发布查询的 SQL 和示例数据。 嘿,我更新了问题以包含相关表中的一些数据。我还包括了两个查询的 SQL 和我对新查询的猜测,谢谢 Sam【参考方案2】:

您在问题更新中包含此查询:

SELECT
    QrySaleTot.Item,
    QrySaleTot.ProductID,
    [QryStockLevel].[Stock]-[QrySaleTot].[Quantity] AS StockOnHand
FROM QrySaleTot, QryStockLevel
GROUP BY
    QrySaleTot.Item,
    QrySaleTot.ProductID,
    [QryStockLevel].[Stock]-[QrySaleTot].[Quantity];

第一个问题是您没有连接条件......所以来自 QrySaleTot 的每一行都将与来自 QryStockLevel 的每一行相匹配。这将产生所谓的笛卡尔积,或cross join。修改它以在 2 个查询共有的字段上使用连接。

GROUP BY 在这里似乎没有用,因为您没有计算任何聚合值。

最后,Item 是一个保留字。如果您必须保留该字段名称,请在查询中引用它的任何地方将其括起来,如下所示:QrySaleTot.[Item]

【讨论】:

谢谢。内部连接修复了它:)

以上是关于库存摘要访问的主要内容,如果未能解决你的问题,请参考以下文章

高并发访问mysql时的问题:库存超减

秒杀场景:如何通过 Redis 减库存?

秒杀场景:如何通过 Redis 减库存?

接口优化:Redis预减库存,减少对数据库访问方案

数据库存命名规则

秒杀场景:如何通过 Redis 减库存?