【问题标题】:Selecting data from 3 tables to calculate inventory levels从 3 个表中选择数据来计算库存水平
【发布时间】:2018-12-18 21:37:57
【问题描述】:

我目前正在 phpgrid 中设置库存系统。我有 3 张桌子 - 产品、订单、购买。我正在尝试列出产品中的所有 PartNumber 字段以及购买中每个 PartNumber 的 NumberReceived 总数以及订单中每个 PartNumber 的 NumberShipped 总数。

从那里我相信我可以使用 phpgrid 显示一个虚拟/计算列,该列将从 NumberReceived 中减去 NumberShipped 并给我每个 PartNumber 的当前库存水平。

寻找类似这样的结果:

PartNumber   | Received  | Shipped  | (calculated) Qty On Hand
______________________________________________________________
12345        | 20        |  10      |  10
67890        | 40        |  5       |  35

我无法思考如何将所有内容连接在一起以检索我想要的数据。此 SELECT 显示一些数据,但不是每个 PartNumber 都具有正确的计算。

 "SELECT 
        p.id, 
        sum(p.NumberReceived) AS 'Received', 
        sum(o.NumberShipped) As 'Shipped' 
        FROM purchases p
        INNER JOIN orders o on p.id = o.ProductId
        GROUP BY p.id ", 
    "id", "purchases");

我意识到我需要在其中包含 PartNumber 列才能列出 PartNumber 字段的所有数据。所以然后我尝试了这个 - 我想我已经接近了,但这一直给我一个错误 - PHPGRID_ERROR:无法执行查询。错误 102

"SELECT 
    prod.id,prod.PartNumber, 
    sum(pur.NumberReceived) AS 'Received', 
    sum(o.NumberShipped) As 'Shipped', 
    FROM products prod
    LEFT JOIN orders o ON prod.PartNumber = o.ProductId
    LEFT JOIN purchases pur ON prod.PartNumber = pur.ProductId", 
"id", "products");

我希望有人能帮助我朝着正确的方向前进。谢谢你们!

【问题讨论】:

    标签: sql inventory-management


    【解决方案1】:

    如果您是求和,则需要分组。以下应该工作。如果没有,请发送特定的错误消息。 (您在选择块中的最后一项之后还有一个额外的逗号)

    SELECT 
        prod.id,prod.PartNumber, 
        sum(pur.NumberReceived) AS Received, 
        sum(o.NumberShipped) As Shipped 
        FROM products prod
        LEFT JOIN orders o ON prod.PartNumber = o.ProductId
        LEFT JOIN purchases pur ON prod.PartNumber = pur.ProductId"
        GROUP BY prod.id, prod.PartNumber;
    

    【讨论】:

    • 谢谢。这确实让我更近了一步。现在的问题是 NumberReceived 和 NumberShipped 的总和看起来是所有内容的总和。如何获得每个 PartNumber 的 NumberReceived 总和?以及每个 PartNumber 的 NumberShipped 总和?
    • 这正是这个查询要做的——将 NumberReceived 和 NumberShipped 按 PartNumber 相加。试试看。
    • 我不知道为什么不是。我认为这也是这样做的。这是我运行它时得到的屏幕截图。我知道数据库中 Received 列的每个 PartNumber 至少有数据。 photos.app.goo.gl/UmFtnEcTqdKz2N6X9感谢您的宝贵时间。这让我发疯了,很高兴能以新的眼光看待它。
    • 检查左连接中的链接。 PartNumber 是否与 ProductID 匹配?还是应该是 prod.ID=o.ProductID?
    • 啊,是的,你是对的。所以我得到了一半的工作 - LEFT JOIN 购买 pur ON prod.id = pur.ProductId 是语句中的第一个 Join ,它返回了我期望的数据。语句的第二行作为 LEFT JOIN 命令 o ON prod.id = o.ProductId 并且没有返回正确的数据。关于为什么第二部分返回一些看起来很奇怪的数字有什么想法吗?我尝试了几种不同的组合,但似乎无法让它发挥作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 2013-10-01
    相关资源
    最近更新 更多