-1

我不知道如何问我的问题,所以我将解释我正在尝试做的事情:我正在 Delphi XE 中构建一个应用程序,它应该根据产品配方和订单计算原材料的消耗量。

我有 5 个表:订单、订单内容、产品、原材料和食谱。每个订单由几个产品组成,每个产品都有自己的原材料配方。

我已经在 Query1 中使用 sql 总结了所有订单中的所有产品。这是 Query1 的命令:

    select Products.Price,
    OrdersContent.ID_Product, sum(OrdersContent.QNT) as QNT_Sum,
    (Products.Price * sum(OrdersContent.QNT)) as Value
    from Orders, OrdersContent, Products
    where Orders.ID = OrdersContent.ID_Order
    and Products.ID = OrdersContent.ID_Product
    group by
    OrdersContent.ID_Product, Products.Price

这将返回:

    |Price  | ID_Product | QNT_Sum | Value |
    ----------------------------------------
    |  2    |   122521   |  150    |   300 |
    |  10   |   366547   |   10    |   100 |
    |  xxx  |   xxxxxx   |  xxx    |  xxxxx|

这正是我想要的。

所以现在我想知道是否有一种方法也可以使用 sql 来计算原材料消耗,因为我知道如何做到这一点的唯一另一种方法是遍历整个 Query1 并分别计算每个记录(产品)的原材料消耗,将其添加到新表中,然后对结果进行汇总,这非常耗时。

我很确定必须有一种更有效的方法来做到这一点,但不知道如何或在哪里搜索如何做到这一点。我不是要代码,而是要一些指向教程或示例的指针或链接。

我希望我足够清楚,如果没有,请询​​问更多信息。

4

1 回答 1

0

使用适当的连接将原材料和配方添加到您的 FROM 子句中。按原材料分组。从您的 group by 语句中删除 id_product 和 price。将您选择的聚合更改为 sum(products.price*orderscontent.qnt)。

我猜你在食谱和原材料中的列名,但这是大致的想法。

    select Recipes.ID_RAW_MATERIALS, 
           sum(OrdersContent.QNT) as QNT_Sum,
           sum(Products.Price * OrdersContent.QN)) as Value 
      from Orders, OrdersContent, Products, Recipes, RawMaterials 
     where Orders.ID = OrdersContent.ID_Order 
       and Products.ID = OrdersContent.ID_Product 
       and Recipes.ID_PRODUCT = Products.ID 
       AND Recipes.ID_RAW_MATERIAL = Rawmaterials.ID 
     group by Recipes.ID_RAW_MATERIALS
于 2013-08-14T17:22:13.227 回答